2013-08-21 53 views
1

我正在使用附加SDK创建一个Firefox扩展。由于各种原因(主要是simple-prefs模块中的特性很少),我不得不创建一个XUL窗口并使用window/utils将其包含在内。这个窗口显示正确,它的工作原理应该如何。Firefox XPCOM和附加SDK通信

我的问题是我需要从包含在我的XUL窗口中的脚本文件调用我的main.js中的函数。它们不存在于同一个命名空间中,所以我不确定如何访问我的函数。我很高兴使用消息传递,但我不认为XPCOM中包含的脚本可以使用port功能。

我在想我需要设置某种回调,但我真的不知道我该如何去做。我看着创造我自己的XPCOM组件,但似乎不允许我与加载项SDK注册XPCOM组件,根据the XUL Migration Guide

供参考,这是我的(略)的文件夹结构:

- package.json 
- chrome.manifest (to allow me to open a XUL window) 
- lib 
    - main.js 
- chrome 
    - content 
     - window.xul 
     - script.js 

我想要一些代码在main.jsscript.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喜好变动,然后使其改变时,我想调用的函数,但给我的印象偏好系统的一个巨大的滥用。我想以正确的方式做,如果有的话。

回答

1

我用我满意的方式解决了自己的问题。

我改变的window.open上述调用来window.openDialog,在我的回调函数作为参数传递,就像这样:在script.js

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 
     } 
    } 
}); 

然后,当我想调用的回调,我使用

window.arguments[0].doStuff(); 
相关问题