我有个mxml文件部分如下:<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns="*"  creationComplete="init();">
<mx:Script>
<![CDATA[
import mx.controls.ProgressBar; 
import mx.controls.Alert; 
import mx.collections.ArrayCollection; 
private var urlRequest:URLRequest; 
private var fList:FileReferenceList=new FileReferenceList(); 
private var fileQueue:Array=[]; 
private var selectedFiles:ArrayCollection=new ArrayCollection();
private var config:Object={urlRequest:"Uploader.ashx"};

private function init():void

Security.allowDomain("*"); 
ExternalInterface.addCallback("InitBusiness",InitBusiness);
ExternalInterface.addCallback("Browse",browse);
ExternalInterface.addCallback("Upload",uploadFiles);
fList.addEventListener(Event.SELECT,selectFileHandler);
fList.addEventListener(Event.COMPLETE,completeHandler);
fList.addEventListener(IOErrorEvent.IO_ERROR,ioErrorHandler);
this.addEventListener(IOErrorEvent.IO_ERROR,ioErrorHandler); 
}
private function InitBusiness(obj:Object):void{ 
obj=obj || {};  
for(var p:String in obj){
this.config[p]=obj[p];

}  
private function browse():void
{  
selectFiles();
}
private function selectFiles():void
{  
var filters:Array=[];
if(this.config["filters"]){
for each(var o:Object in this.config["filters"]){
filters.push(new FileFilter(o["description"],o["extension"]));
}
}
else{
filters=[new FileFilter("所有文件(*.*)","*.*")];
}  
fList.browse(filters); 
fList=new FileReferenceList(); 
}
private function selectFileHandler(event:Event):void{

OuterEventHandler("SELECT",event); 
for each(var f:FileReference in fList.fileList){
selectedFiles.addItem(f);

}
private function ioErrorHandler(event:IOErrorEvent):void{ 
OuterEventHandler("IO_ERROR",event);  
}
private function completeHandler(event:Event):void{
OuterEventHandler("COMPLETE",event);  
}  
public function singleCompleteHandler(event:DataEvent):void{ 
var f:FileReference=event.target as FileReference;
OuterEventHandler("UPLOAD_COMPLETE_DATA",event); 
f.removeEventListener(DataEvent.UPLOAD_COMPLETE_DATA,singleCompleteHandler);
f.removeEventListener(ProgressEvent.PROGRESS,progressHandler);
uploadFile();
}
private function progressHandler(event:ProgressEvent):void{
OuterEventHandler("PROGRESS",event);

private function uploadFiles():void{
fileQueue=selectedFiles.toArray();//.concat();
fileQueue.reverse();
this.urlRequest = new URLRequest(this.config["urlRequest"]);
uploadFile();

private function uploadFile():void{  
if(fileQueue.length>0){
try{ 
var f:FileReference=fileQueue.pop() as FileReference;
//f.addEventListener(Event.COMPLETE,singleCompleteHandler);
f.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA,singleCompleteHandler);
f.addEventListener(ProgressEvent.PROGRESS,progressHandler); 
f.upload( this.urlRequest ); 
}
catch(err:Error){
Alert.show(err.message);
}

}
private function OuterEventHandler(eventName:String,event:Object):void{  
if(this.config.events && this.config.events[eventName]){
ExternalInterface.call(this.config.events[eventName],event);

}
private function clear():void{
if(!this.selectedFiles) return;
this.selectedFiles.removeAll();

]]>
</mx:Script>  
<mx:HBox>
<mx:Button label="测试" click="selectFiles()" />
</mx:HBox>
</mx:Application>如上,我希望将这个东东在html页面不显示,然后通过html页面的js调用browse打开文件浏览对话框,
uploader.Browse();
可是,总提示未指明的错误,请各位达人指点迷津啊!!!!!!

解决方案 »

  1.   

    补充:
    1,直接点那个按钮可以打开对话框;
    2,JS调用这个flex中普通的函数是没问题的. <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" onactivate="init(true);"
    id="FlexFileUpload" width="611" height="161" style="padding:0 0 0 0;"
    codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab">
    <param name="movie" value="yuploader11.swf" />
    <param name="quality" value="high" />
    <param name="bgcolor" value="#869ca7" />
    <param name="allowScriptAccess" value="sameDomain" /> 
    </object>
      

  2.   

    我猜测,是不是需要将FlexFileUpload激活才行?
     onactivate="init(true);"在此 init函数中FlexFileUpload.Browse();正常.
      
    但是在html其他地方直接FlexFileUpload.Browse();就不行.郁闷的是,FlexFileUpload.setActive();不行