我正在尝试编写我的第一个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)
事先提前答案 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
功能可以通过普通网页权限完成,则可以将其定义移至内容脚本中。如果需要其他权限,您必须让内容脚本通过emit
和on
函数与Chrome脚本进行通信,如上面的链接所述。
如果您打算再制作内容脚本,我建议您separate it into its own file让您的生活更轻松。