Как прослушать загрузки страниц из расширения Fennec? - PullRequest
4 голосов
/ 03 марта 2011

Я работаю над простым расширением для Fennec, которое должно добавлять специальный элемент HTML на каждую загруженную страницу. Я создал этот простой overlay.js:

var MyAddon = {
    onLoad: function(aEvent){
        var appcontent = document.getElementById("appcontent"); // Firefox
        if (!appcontent) {
            appcontent = document.getElementById("browsers"); // Fennec
        }
        if (appcontent) {
            appcontent.addEventListener("DOMContentLoaded", MyAddon.onDocumentLoad, true);
        }
    },

    onUnLoad: function(aEvent){
        var appcontent = document.getElementById("appcontent"); // Firefox
        if (!appcontent) {
            appcontent = document.getElementById("browsers"); // Fennec
        }
        if (appcontent) {
            appcontent.removeEventListener("DOMContentLoaded", MyAddon.onDocumentLoad, true);
        }
    },

    onUIReady: function(aEvent){
    },

    onUIReadyDelayed: function(aEvent) {
    },

    onDocumentLoad: function(aEvent) {
    alert("OK");
    }
};

window.addEventListener("load", MyAddon.onLoad, false);
window.addEventListener("unload", MyAddon.onUnLoad, false);
window.addEventListener("UIReady", MyAddon.onUIReady, false);
window.addEventListener("UIReadyDelayed", MyAddon.onUIReadyDelayed, false);

Проблема в том, что оповещение показывается только один раз при запуске браузера, я ожидаю, что оно будет отображаться на каждой загружаемой странице. Что я делаю не так?

Версия Fennec: 4.0b5 (тестирование на настольной версии для Windows)

Спасибо!

1 Ответ

4 голосов
/ 15 апреля 2011

К сожалению, это сложнее для Fennec. Не существует такого события, как «DOMContentLoaded» из документа содержимого. Это связано с тем, что главное окно, к которому наложен Javascript, работает не так, как дочерние окна (окна содержимого)

Вы должны:

  1. загружать скрипт с каждой новой вкладкой:

    browser.messageManager.loadFrameScript ("chrome: //my_add_on/content/content.js", true);

  2. Внутри content.js прослушайте событие DOMContentLoaded:

    addEventListener ("DOMContentLoaded", process, true); функция-процесс (событие) {...}

Для получения дополнительной информации, проверьте эти страницы:

...