繁体   English   中英

Firefox XPCOM和附加SDK通信

[英]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.openwindow.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM