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

时间:2013-11-15 12:36:45

标签: 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"]
});

(答案为here。) 现在我想使用声明的函数而不是匿名函数,但我无法让它工作:

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

getImgData function (e) {
    alert("blubber3");
}

第一个问题是我只是添加了函数"缺少了语法错误;在陈述之前#34;。但是cfx没有告诉我错误的路线。 (是否有任何有用的js编辑工具,具有良好的语法检查/内容辅助?) 那么如何声明一个函数并在脚本中的其他地方使用ist。最后,函数需要获取click的目标并解析它。 (我阅读了教程,但你们都使用匿名函数:-P)

事先提前

1 个答案:

答案 0 :(得分:5)

实现chrome脚本和内容脚本之间的分离非常重要。 Chrome脚本是以与Firefox相同的安全权限运行的脚本 - 他们可以完全访问Firefox和您的计算机。内容脚本是以与网页相同的权限运行的脚本。他们可以搞乱那个网页,但是受到严格限制。为了保持安全,the way these two types of scripts can communicate is limited。您不希望网页能够在扩展程序的内部代码中调用它想要的任何功能!

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

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

如果您打算再制作内容脚本,我建议您separate it into its own file让您的生活更轻松。