2011-12-20 48 views
0

我试图通过ExternalInterface将数据从Flash传递到Javascript。 当我在本地主机上测试时,它工作正常,但是当我尝试在IIS上设置网站时,所以我的同事可以测试我的应用程序,例如:http://192.168.0.10/MyApp,我收到此错误:使用Flash ExternalInterface时出错

Error calling method on NPObject.

在读#1的一些问题后,我试图设置allowScriptAccess="always"在我的嵌入标签和Security.allowDomain(*)我的AS文件,但它仍然无法正常工作。

如果有问题,我正在使用swf object

我错过了什么?

编辑:当我尝试从 JS调用的方法SWF出现的错误。这是适合答案的代码。

var swfReady = false; 
swfobject.embedSWF("swf/1.swf", "flashContent", "300", "250", "11", "expressInstall.swf", null, { allowScriptAccess: "always" } , null, function (e) { 
    if (e.success) { 
     setTimeout(function() { 
       swfReady = true; 
     }, 150); 
    } 
}); 

btnConfig.on('click', function() { 

    if (swfReady) { 
     flashContent.myMethod(); 
    } else { 
     alert("Hold on..."); 
    } 

}); 

这在本地主机的伟大工程,但是,当有人试图通过我的IP查看相同的页面,我得到的JavaScript错误Error calling method on NPObject

+0

检查你做了'的Security.allowDomain(“*”);''你打电话ExternalInterface'前 – 2011-12-20 11:26:25

+0

我在我的AS3类的构造函数设置它。是对的吗? – 2011-12-20 11:51:25

+0

SWF文件与嵌入的HTML页面位于同一个域中吗? – 2011-12-20 11:54:57

回答

1

有时候这种情况发生在swf没有准备好的时候。您可以尝试embedSWF中的回调函数。在回调之前不要调用任何swf方法。除此之外,有时你需要几毫秒的延迟。

swfobject.embedSWF("sample.swf", "swfdiv", "400", "300", "9.0.0", "expressInstall.swf", null, null, null, function (e) { 
    if (e.success) { 
     console.log("swf ready "); 
     setTimeout(function(){ 
      // call swf method here 
     }, 150); 
    } else { 
     console.log("embedding failed"); 
    } 
}); 
+0

我尝试将所有绑定放入回调中,因此如果在swf准备好之前单击该按钮,它将不会执行任何操作。这不起作用... – 2011-12-20 13:22:52

+0

添加一个JavaScript函数并使用** ExternalInterface.call **调用它来确保ExternalInterface正在工作。 – Diode 2011-12-20 14:15:53

+0

我做到了,它正在工作。反过来,使用** ExternalInterface.addCallback ** – 2011-12-20 15:49:18

相关问题