Ответ 1
По моему опыту разработки с Firefox я обнаружил, что в некоторых случаях код инициализации для различных элементов действует так, как если бы он был асинхронным. Другими словами, когда вы закончите выполнение
var newBrowser = window.document.createElement('browser');
newBrowser.setAttribute('flex', '1');
newBrowser.setAttribute('type', 'content');
cacheFrame.insertBefore(newBrowser, null);
ваш browser
, возможно, еще не готов. Когда вы добавляете задержку, у всех есть время для инициализации, поэтому они работают нормально. Кроме того, когда вы делаете такие вещи, как динамическое создание элементов browser
, вы, вероятно, делаете то, что очень немногие пробовали раньше. Другими словами, это звучит как ошибка в Firefox, и, вероятно, тот, который не получит большого внимания.
Вы говорите, что используете onLocationChange
, чтобы вы могли узнать, когда добавить слушателя load
. Я собираюсь предположить, что вы добавляете слушателя load
к contentDocument
, так как вы упомянули об этом. Вместо этого вы можете добавить слушателя load
к самому browser
, как и к iframe
. Если я заменил
newBrowser.addProgressListener(listener);
с
newBrowser.addEventListener("load", function(e) {
console.log('got here! ' + e.target.contentDocument.location.href);
}, false);
то я получаю уведомления для каждого browser
.