2011-12-30 74 views
2

我想创建一个多文件上传的Flash应用程序从外部接口调用,但它不工作。AS3/JavaScript ExternalInterface和文件上传

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部分,并取消对警报呼叫时,它显示警报,还当我的评论Out ExternalInterface调用,只保留fileRef部分,它显示文件上传对话框。

当我运行它打算,我得到以下错误:

Error calling method on NPObject 

搜索谷歌挥起上无论是上传文件,或使用AS3 ExternalInterface的教程无休止的名单,但没有使用它们在一起!

任何想法?

+0

我注意到'fileReferenceList'应该可能是'FileReferenceList',你的'ExternalInterface.addCallback()'可能应该是对函数的引用而不是匿名函数。 – Taurayi 2011-12-30 13:55:47

+0

我知道,这是一个错字和一个快速写出来的方式,因为我实际上是在我的手机上键入这个字词......就像我说的,它的每个单独部分工作正常,只是不在一起。 – 2011-12-30 14:01:02

+0

你想要做什么? – Taurayi 2011-12-30 14:20:09

回答

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()。这是没有办法的。

+0

谢谢澄清!我正在尝试为多文件上传制作HTML5后备,这种上传并没有改变网站外观,但看起来我无法做到!我只是使用Flash上​​传,直到HTML5得到更好的支持,我想!你也帮助我与我的音乐播放器,我之所以这么做是因为它奇怪地将它整合为HTML5的后备之作! – 2011-12-30 20:02:43

+0

为什么你不使用''?如果我正确地理解了你,那不需要HTML5,只是好的常规HTML。这样你就不必倒退到闪光。此外,我认为闪存将成为HTML5的后备版本更有意义。 – Taurayi 2011-12-30 20:58:12

+0

哦,永远不要你想多个文件上传,因此'FileRereferenceList'。 – Taurayi 2011-12-30 21:07:12

2

这里不是问题,您只能从交互事件中调用browse()

Adob​​e表示:

In Flash Player 10 and Flash Player 9 Update 5, you can only call this method successfully in response to a user event (for example, in an event handler for a mouse click or keypress event). Otherwise, calling this method results in Flash Player throwing an Error exception.

尝试安装Flash调试播放器,看看你得到那个异常,或试图抓住它,并显示错误消息。

+0

是的,Taurayi已经在他的答案中指出了我选择的正确答案! – 2012-01-02 14:19:58

+0

对不起,错过了那部分:) – 2012-01-02 14:26:53