【问题标题】:Firefox XPCOM and Add-on SDK CommunicationFirefox XPCOM 和附加 SDK 通信
【发布时间】:2013-08-21 02:42:53
【问题描述】:

我正在使用附加 SDK 创建一个 firefox 扩展。由于各种原因(主要是 simple-prefs 模块中的功能不足),我不得不创建一个 XUL 窗口并使用 window/utils 包含它。此窗口显示正确,并且完全按照应有的方式工作。

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

我想我需要设置某种回调,但我真的不知道该怎么做。根据the XUL Migration Guide

,我考虑创建自己的 XPCOM 组件,但似乎不允许使用附加 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 中的偏好变化来解决这个问题,然后在我想要调用该函数时让它发生变化,但这让我觉得这是对偏好系统。如果有的话,我想以正确的方式来做。

【问题讨论】:

    标签: javascript firefox firefox-addon xpcom


    【解决方案1】:

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

    我将上面对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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多