2011-12-20 71 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

相關問題