【发布时间】:2011-07-14 14:48:13
【问题描述】:
我正在尝试编写一个移动 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”之类的),但找不到任何东西。
有没有人知道如何在每次页面加载时自动执行代码?
问候,
威廉
【问题讨论】:
标签: mobile firefox-addon fennec