AS3 / JavaScript ExternalInterface和文件上传

时间:2011-12-30 13:34:35

标签: javascript jquery actionscript-3

我正在尝试创建一个从外部接口调用的多文件上传Flash应用程序,但它无法正常工作。

AS3:

var fileRef:FileReferenceList;

ExternalInterface.addCallback('selectFiles', showDialog);

 function showDialog()
{
  fileRef = new FileReferenceList();
  fileRef.browse();

//  ExternalInterface.call('ASalert');
}

JavaScript / jQuery:

$(function(){
  var uploader = this['_uploader'];

  $('#selectFiles').click(function(){
    uploader.selectFiles();
  })
})

function ASalert() {
  alert('Fired');
}

当我运行脚本并注释掉fileRef部分并取消注释警报调用时,它会显示警报,当我注释掉ExternalInterface调用时,只留下fileRef部分,它会显示文件上传对话框。

当我按预期运行时,我收到以下错误:

Error calling method on NPObject

搜索谷歌在上传文件或在AS3中使用externalInterface的教程中都有一个永无止境的教程列表,但没有任何关于使用它们的内容!

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

尝试将ExternalInterface.addCallback('selectFiles', showDialog);语句包装在检查ExternalInterface可用性的条件中:

if(ExternalInterface.available)
{
    ExternalInterface.addCallback('selectFiles', showDialog); 

}

即使解决了这个问题,你也会遇到麻烦:

function showDialog() 
{ 
  fileRef = new FileReferenceList(); 
  fileRef.browse(); 

//  ExternalInterface.call('ASalert'); 
}

如果没有某种用户互动(如鼠标点击或按键),则无法调用FileReferenceList.browse()。没有办法解决这个问题。

答案 1 :(得分:2)

此处的问题不是您只能从互动事件中调用browse()吗?

Adob​​e说:

  

在Flash Player 10和Flash Player 9 Update 5中,您只能成功调用此方法以响应用户事件(例如,在鼠标单击或按键事件的事件处理程序中)。否则,调用此方法会导致Flash Player抛出Error异常。

尝试安装Flash调试播放器并查看是否出现该异常,或尝试捕获它并显示错误消息。