Предыстория:
У нас есть несколько flash-объектов, написанных на FLEX и отображаемых на одной странице HTML.
Мы используем javascript для связи между объектами и выполнения других операций, связанных со страницей.
Поток выполнения:
В событии creationComplete кода FLEX наших объектов мы выполняем следующий (псевдоподобный) код:
if (ExternalInterface.available) {
ExternalInterface.addCallBack("initialize");
ExternalInterface.callMethod("ready");
} else {
Alert.show("No External Interface Available!");
}
Который выполняет следующий код javascript (псевдо-иш):
Object.prototype.ready = function(){
//this is simplified. More happens but all we care about is the following
flexObject.initialize();
}
Который выполняет следующий код flex (псевдо-иш):
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 (псевдоним):
Object.prototype.responseMethod = function() {
alert("responded!");
}
Проблема:
Иногда последняя описанная функция javascript никогда не вызывается. Когда это происходит, ни одно из предупреждений ошибка не появляется, окончательный код просто не выполняется, но все до этого момента выполнялось успешно.
Это происходит примерно 1/100+ раз в Chrome/Firefox Это происходит примерно 1/10 раза в IE8 Это происходит примерно 9/10 раз в IE7 (полное раскрытие - единственная машина, которую мы должны использовать для тестирования, также намного медленнее)
Поскольку проблема носит периодический характер и становится более очевидной в более медленных браузерах/машинах, я подозреваю, что она связана со временем.
Если я остановлю первый вызов flex 'intiailize' до тех пор, пока я не нажму кнопку в пользовательском интерфейсе, а не автоматически на том, что по сути является 'creationComplete', все ВСЕГДА работает.
Возможно, я смогу решить проблему, просто введя "задержку" в javascript, но мне очень-очень не нравится этот хак.