我正在尝试创建一个从外部接口调用的多文件上传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的教程中都有一个永无止境的教程列表,但没有任何关于使用它们的内容!
有什么想法吗?
答案 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()
吗?
Adobe说:
在Flash Player 10和Flash Player 9 Update 5中,您只能成功调用此方法以响应用户事件(例如,在鼠标单击或按键事件的事件处理程序中)。否则,调用此方法会导致Flash Player抛出Error异常。
尝试安装Flash调试播放器并查看是否出现该异常,或尝试捕获它并显示错误消息。