[英]Firefox XPCOM and Add-on SDK Communication
我正在使用附加SDK创建firefox扩展。 由于种种原因(主要是simple-prefs模块中缺乏功能),我不得不创建一个XUL窗口,并使用window / utils将其包括在内。 此窗口可以正确显示,并且可以正确地工作。
我的问题是我需要从XUL窗口中包含的脚本文件中调用main.js
的函数。 它们不存在于同一个命名空间中,因此我不确定如何访问我的函数。 我很高兴使用消息传递,但是我不认为XPCOM中包含的脚本可以使用port
功能。
我以为我需要设置某种回调,但是我真的不知道该如何处理。 我考虑创建自己的XPCOM组件,但根据《 XUL迁移指南》 ,似乎不允许我向附加SDK注册XPCOM组件。
供参考,这是我的(缩写)文件夹结构:
- package.json
- chrome.manifest (to allow me to open a XUL window)
- lib
- main.js
- chrome
- content
- window.xul
- script.js
我希望main.js
中的某些代码被script.js
的某些代码调用。 请注意,该窗口是在main.js中创建的(就像这样)
var { open } = require('sdk/window/utils');
var window = open('chrome://my-app-id/content/window.xul', { features: {
chrome: true,
centerscreen: true,
toolbar: true
}});
而且这很有用。 有人有什么想法吗?
编辑:我可以通过观察main.js
的首选项更改来解决此main.js
,然后在希望调用该函数时使它发生更改,但这令我main.js
,因为它main.js
滥用了首选项系统。 如果有的话,我想以正确的方式做。
我以自己满意的方式解决了自己的问题。
我改变了上面的调用window.open
到window.openDialog
,在我的回调函数作为参数传递,就像这样:
var { openDialog } = require('sdk/window/utils');
var window = openDialog({url: 'chrome://my-app-id/content/window.xul',
features: {
chrome: true,
centerscreen: true,
toolbar: true
},
args: {
doStuff: function(){
//Do all the stuff
}
}
});
然后在script.js
,当我希望调用回调时,我使用
window.arguments[0].doStuff();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.