AS3/JavaScript外部接口和文件上载
我试图创建一个多文件上传flash应用程序,从外部接口调用,但它不起作用 AS3: JavaScript/jQuery:AS3/JavaScript外部接口和文件上载,javascript,jquery,actionscript-3,Javascript,Jquery,Actionscript 3,我试图创建一个多文件上传flash应用程序,从外部接口调用,但它不起作用 AS3: JavaScript/jQuery: $(function(){ var uploader = this['_uploader']; $('#selectFiles').click(function(){ uploader.selectFiles(); }) }) function ASalert() { alert('Fired'); } 当我运行脚本并注释掉fileRef部分并取
$(function(){
var uploader = this['_uploader'];
$('#selectFiles').click(function(){
uploader.selectFiles();
})
})
function ASalert() {
alert('Fired');
}
当我运行脚本并注释掉fileRef部分并取消注释警报调用时,它会显示警报;当我注释掉ExternalInterface调用时,只留下fileRef部分,它会显示文件上载对话框
当我按预期运行它时,会出现以下错误:
Error calling method on NPObject
搜索谷歌提供了一个关于上传文件或在AS3中使用externalInterface的无休止的教程列表,但没有关于同时使用它们的教程
有什么想法吗?尝试包装您的
ExternalInterface.addCallback('selectFiles',showDialog)检查外部接口可用性的条件中的代码>语句:
if(ExternalInterface.available)
{
ExternalInterface.addCallback('selectFiles', showDialog);
}
即使解决了这个问题,您也会遇到以下问题:
function showDialog()
{
fileRef = new FileReferenceList();
fileRef.browse();
// ExternalInterface.call('ASalert');
}
如果没有诸如鼠标单击或按键之类的用户交互,则无法调用FileReferenceList.browse()
。没有办法解决这个问题。这里的问题不就是您只能从交互事件调用browse()
Adobe说:
在Flash Player 10和Flash Player 9更新5中,您只能在响应用户事件时成功调用此方法(例如,在鼠标单击或按键事件的事件处理程序中)。否则,调用此方法将导致Flash Player引发错误异常
尝试安装flash调试播放器,看看是否出现异常,或者尝试捕获异常并显示错误消息。我注意到的几件事可能是fileReferenceList
,您的ExternalInterface.addCallback()
可能应该是对某个函数的引用,而不是匿名函数。我知道,这是一个打字错误,也是一种快速写出它的方式,因为我实际上是在手机上键入的。。。就像我说的,它的每一部分都很好,只是不在一起。你到底想做什么?我试图让多文件上传对话框在单击ID为“selectFiles”的HTML元素时出现。我认为这是显而易见的,因为该函数是由外部接口调用的……可能是这样“很明显“但这并不意味着我认为你想做的和你想做的是同一件事。谢谢你澄清这一点!我试图为多文件上传做一个HTML5回退,这并没有太大程度地改变网站外观,但似乎我不能!我想,在HTML5得到更好的支持之前,我只会使用Flash上传!你还帮助我使用了我的音乐播放器,我这么做的原因很奇怪,就是为了将它集成为HTML5的后备方案!为什么不直接使用
?如果我理解正确的话,那不需要HTML5,只需要好的普通HTML。这样你就不必退回到flash。另外,我认为flash将是HTML5的后盾更有意义。哦,不管你想要多个文件上传,因此,FileRereferenceList
。是的,我可以使用HTML5进行多个上传,并且希望使用相同的界面进行flash上传。我只需要使用JavaScriptSWF对象,如果没有多个上传,就用flash按钮替换文件上传按钮!是的,陶拉伊已经在他的回答中指出了这一点,我选择了正确的答案!啊,对不起,错过了那部分:)
function showDialog()
{
fileRef = new FileReferenceList();
fileRef.browse();
// ExternalInterface.call('ASalert');
}