为什么我无法使用Firefox Addon SDK访问自定义函数?
在下面的示例代码中,单击上下文菜单Sub Item 1不起作用;它引用自定义函数verifyTest()
但返回ReferenceError:verifyTest未定义。单击指向内置函数alert()
的子项2可以很好地工作。
我也尝试过self.postMessage(和onMessage)但没有成功..我需要做些什么才能访问(或定义)我的插件工作所需的自定义函数?
///// Content in main.js
function verifyTest() {
alert('test1');
}
var script1 = 'self.on("click", function(node, data){'+
' verifyTest();'+
'});';
var script2 = 'self.on("click", function(){'+
' alert(\'test2\');'+
'});';
var cm = require("sdk/context-menu");
cm.Menu({
label: "Main Item",
context: cm.SelectorContext("body"),
items: [
cm.Item({ label: "Sub Item 1", context: cm.SelectorContext("input[type=text]"), contentScript: script1, data: "item1" }),
cm.Item({ label: "Sub Item 2", context: cm.SelectorContext("input[type=text]"), contentScript: script2, data: "item2" })
]
});
答案 0 :(得分:1)
因为verifyTest
是在main.js
而不是script1
的背景下定义的。
一种解决方案是将verifyTest
置于script1
内(作为引用文字)。
更好的解决方案是使用此内容创建文件script1.js
(或其他有意义的名称):
function verifyTest() {
alert('test1');
}
self.on("click", function(node, data){
verifyTest();
});
并使用contentScriptFile
代替contentScript
加载它(请参阅Loading Content Scripts)。
cm.Item({ label: "Sub Item 1", context: cm.SelectorContext("input[type=text]"), contentScriptFile: require("sdk/self").data.url("script1.js"), data: "item1" }),
这使它更具可读性和可维护性,并避免使用在不同上下文中定义的变量/函数的错误。