背景:FLEX ExternalInterface.available如何檢查失敗但仍然不可用?
我們寫在FLEX和所呈現的單一HTML頁面內多個Flash對象。
我們正在使用javascript在對象之間進行通信並執行其他頁面相關操作。
執行流程爲:
在creationComplete事件我們的目標,我們執行以下(僞ISH)的FLEX代碼的代碼:
if (ExternalInterface.available) {
ExternalInterface.addCallBack("initialize");
ExternalInterface.callMethod("ready");
} else {
Alert.show("No External Interface Available!");
}
哪執行以下代碼:javascript(psuedo-ish)code:
Object.prototype.ready = function(){
//this is simplified. More happens but all we care about is the following
flexObject.initialize();
}
執行該follwoing 撓曲(僞ISH)代碼:
public function initialize() {
var asyncObject:Object = remoteService.executeMethod();
asyncObject.addResponder(function(object:Object){
if (ExternalInterface.available) {
ExternalInterface.callMethod("responseMethod");
} else {
Alert.show("ExternalInterface dissapeared!?");
}
});
}
哪個應該執行以下的javascript(僞ISH)代碼:
Object.prototype.responseMethod = function() {
alert("responded!");
}
問題:
有時概述的最後一個javascript函數永遠不會被調用。當發生這種情況時,錯誤警報不會出現,最終的代碼只是未執行,但到此爲止的所有內容都已成功執行。
這發生約1/100 +次在Chrome/Firefox的 出現這種情況大約1/10倍,IE8 出現這種情況大約9/10的時間在IE7(充分披露 - 我們要用於測試這一目標的唯一機也慢得多)
由於問題是間歇性的,並且在較慢的瀏覽器/機器中變得更加明顯,我懷疑它是與時間有關的。
如果我停下第一柔性「intiailize」從本質上是發生了,直到我在UI中點擊一個按鈕,而不是自動調用「creationComplete」一切都始終有效。
我也許能夠通過引入在JavaScript中的「延遲」簡單地解決這個問題,但我真的不喜歡破解。
試着把你的電話放在try catch方法中,看看有什麼地方出錯 – Triode 2012-03-23 04:52:57
I'現在想知道是否在調用遠程方法後添加響應者。 – Randyaa 2012-04-23 01:29:43
這是一個很好的問題,我想很多人都在思考:)後來添加響應者似乎很奇怪。但它確實是正確的:你不能添加響應者直到你有一個令牌,並且通過進行服務調用來獲得令牌。 – 2012-04-23 01:52:13