Firefox附加组件声明功能并在内容脚本中使用

der*_*itz 1 javascript firefox firefox-addon firefox-addon-sdk

我正在尝试编写我的第一个firefox附加组件.主要问题似乎是我也是javascript的新手.目前我有:

require('sdk/page-mod').PageMod({
    include: ["*"],
    contentScript: 'window.addEventListener("click", function(e) { alert("blub"); }, false);',
    attachTo: ["existing", "top"]
});
Run Code Online (Sandbox Code Playgroud)

(这里是答案.)现在我想使用声明的函数而不是匿名函数,但我不能让它工作:

require('sdk/page-mod').PageMod({
    include: ["*"],
    contentScript: 'window.addEventListener("click", function(e) { alert("blub"); }, false);',
    attachTo: ["existing", "top"]
});

getImgData function (e) {
    alert("blubber3");
}
Run Code Online (Sandbox Code Playgroud)

第一个问题是我通过添加函数"missing; before statement"得到语法错误.但cfx没有告诉我错误的路线.(有没有任何有用的js编辑工具,具有良好的语法检查/内容辅助?)那么如何声明一个函数并在脚本中的其他地方使用ist.最后,函数需要获取click的目标并解析它.(我阅读了教程但你的所有使用匿名函数:-P)

thx提前

Jas*_*abe 5

实现chrome脚本和内容脚本之间的分离非常重要.Chrome脚本是以与Firefox相同的安全权限运行的脚本 - 他们可以完全访问Firefox和您的计算机.内容脚本是以与网页相同的权限运行的脚本.他们可以搞乱那个网页,但是受到严格限制.为了保持安全性,这两种类型的脚本可以通信的方式是有限的.您不希望网页能够在您的扩展程序的内部代码中调用它想要的任何功能!

您的主JS文件(包含的文件require('sdk/page-mod'))是一个chrome脚本.你注入的内容(contentScript)显然是一个内容脚本.他们无法通过直接函数调用进行通信.

如果您的getImgData功能可以通过普通网页权限完成,则可以将其定义移至内容脚本中.如果需要其他权限,则必须让内容脚本通过上述链接中所述的emiton函数与chrome脚本进行通信.

如果您要再制作内容脚本,我建议您将其分成自己的文件,以使您的生活更轻松.