访问Firefox插件SDK main.js文件中的自定义函数
Access custom functions within the Firefox Addon SDK main.js file?
为什么我不能使用Firefox插件SDK访问自定义函数?
在下面的示例代码中,单击上下文菜单subitem 1不起作用;它引用自定义函数verifyTest()
,但返回ReferenceError: verifyTest is undefined。点击指向内置功能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" })
]
});
因为verifyTest
是在main.js
的上下文中定义的,而不是script1
。
一个解决方案是把verifyTest
放在script1
里面(引用文本)。
一个更好的解决方案是用以下内容创建一个文件script1.js
(或其他有意义的名称):
function verifyTest() {
alert('test1');
}
self.on("click", function(node, data){
verifyTest();
});
并使用contentScriptFile
而不是contentScript
来加载它(参见加载内容脚本)。
cm.Item({ label: "Sub Item 1", context: cm.SelectorContext("input[type=text]"), contentScriptFile: require("sdk/self").data.url("script1.js"), data: "item1" }),
这使得它更易于阅读和维护,并避免使用在不同上下文中定义的变量/函数的错误。
相关文章:
- 自定义函数中的光标位置
- Google Sheet自定义函数返回0
- 其中是自定义函数中的属性
- 创建自定义函数以在函数上运行完整的多选下拉列表
- Google Sheets自定义函数条件格式
- dalek回调或自定义函数
- UI网格:如何从自定义函数访问MODEL_COL_FIELD
- 评估作为参数传递给 Google 电子表格中自定义函数的条件
- 具有自定义函数调用的 HTML 表单
- 使用 jQuery 对动态创建的元素调用自定义函数
- 从自定义函数返回promise
- extjs-使用传递的参数创建自定义函数
- AngularJS DI用于自定义函数
- Javascript 自定义函数错误
- 如何使用Angular 1.5组件将属性求值为字符串,这是一个自定义函数
- 为谷歌工作表创建一个自定义函数
- Angular2 在创建 ngSwitch 新视图后调用自定义函数
- 不能在单独的js文件中调用jquery自定义函数
- 访问Firefox插件SDK main.js文件中的自定义函数
- Angular.js Yeoman app.js文件未运行自定义函数