Надстройка Mobile Firefox (Fennec): выполнение кода при загрузке страницы - PullRequest
3 голосов
/ 14 июля 2011

Я пытаюсь написать мобильный плагин firefox, который автоматически выполняет фрагмент кода JavaScript каждый раз при загрузке страницы. Я написал некоторый код для более ранней версии Fennec, но с системой многопроцессорной обработки в более новой версии Fennec (https://wiki.mozilla.org/Mobile/Fennec/Extensions/Electrolysis/), этот код должен был быть перенесен. Я основывался на учебном пособии от http://people.mozilla.com/~mfinkle/tutorials/, чтобы получить рабочая версия, которая выполняет фрагмент кода всякий раз, когда опция выбрана в меню браузера.Это решение состоит из двух частей, а именно overlay.js (для основного (приложения) процесса) и content.js (для дочернего (контента) Процесс). Overlay.js загружается в overlay.xul, а content.js загружается для новых вкладок с помощью следующего кода в overlay.js:

window.messageManager.loadFrameScript("chrome://coin/content/content.js", true);

Код в overlay.js отправляет сообщение на content.js всякий раз, когда выбирается опция в меню браузера, и затем корректно выполняется требуемый код (некоторые теги сценария просто добавляются в заголовок страницы). Однако я не знаю, как автоматически выполнить код при загрузке страницы. Я попробовал следующее в content.js:

function addCoin(aMessage) { ... }

// this executes the desired code every time an option is clicked in the browser menu
addMessageListener("coin:addCoin", addCoin);

// this attempts to execute the code on every page load; i.e., after this script has     
been loaded for the new tab
addCoin(null);

Последнее утверждение, однако, не имеет никакого эффекта. Затем я попытался добавить следующее выражение в конце:

sendAsyncMessage("coin:scriptLoaded", { });

Этот оператор отправляет сообщение в сценарий overlay.js, который регистрирует прослушиватель для этого сообщения и в ответ просто отправляет то же сообщение, что и при нажатии кнопки в меню браузера, т. Е. «Coin: addCoin». Однако это тоже не сработало. Наконец, я попытался найти определенные события, которые мог прослушать сценарий overlay.js (что-то вроде «tabOpened» или что-то в этом роде), но ничего не смог найти.

У кого-нибудь есть идеи, как автоматически выполнять код при каждой загрузке страницы?

С уважением,

William

Ответы [ 2 ]

3 голосов
/ 15 июля 2011

В вашем скрипте content.js вы можете просто зарегистрировать прослушиватель событий для события «загрузка», как вы это делали в старом одиночном процессе Firefox:

addEventListener("load", someFunc, true);

Это вызовет someFunc каждый раз, когда веб-страница загружается во вкладку.

Любой глобальный код в content.js выполняется при первоначальном создании вкладки, а не при загрузке страницы. Используйте глобальный код для настройки прослушивателей событий или сообщений. Веб-контент будет по-прежнему запускать события, которые вы можете перехватить в content.js (дочерний скрипт).

1 голос
/ 17 июня 2013

Это сработало для меня.

в content.js:

var addEventListener;

if (window.BrowserApp) { // We are running in Mobile Firefox
    addEventListener = window.BrowserApp.deck.addEventListener;
} else {
    var appcontent = document.getElementById("appcontent");
    if (appcontent) {
        addEventListener = appcontent.addEventListener;
    }
}

if (addEventListener) {

    var onDOMContentLoaded = function() { /* Code here */ };
    addEventListener("DOMContentLoaded", onDOMContentLoaded, true);

    var onLoad = function() { /* Code here */ };
    addEventListener("load", onLoad, true);

    // etc ...
}
...