Firefox XPCOM和插件SDK通信
Firefox XPCOM and Add-on SDK Communication
我正在使用插件SDK创建一个firefox扩展。由于各种原因(主要是简单prefs模块中缺少功能),我不得不创建一个XUL窗口,并使用window/utils将其包含在内。此窗口显示正确,工作方式正确。
我的问题是,我需要从XUL窗口中包含的脚本文件中调用main.js
中的一个函数。它们不存在于同一个命名空间中,所以我不确定如何访问我的函数。我很乐意使用消息传递,但我不认为XPCOM中包含的脚本可以使用port
功能。
我想我需要设置某种回调,但我真的不知道该怎么做。根据XUL迁移指南,我曾考虑创建自己的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
中的首选项更改,然后在我希望调用函数时使其更改来解决这个问题,但这让我觉得是对首选项系统的巨大滥用。如果有的话,我想用正确的方式做。
我用自己满意的方式解决了自己的问题。
我将上面对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();
相关文章:
- 包括用于facebook评论框的JavaScript SDK
- Google/html5语音识别JavaScript SDK Chrome网络工具包SpeechRecognition
- 在流星上使用微信js-sdk时出现拒绝权限错误
- 如何在corona sdk中从CK编辑器中检索数据
- 如何使用HTML5与UDP套接字通信
- firefox插件和dev/panel之间的通信
- Soundcloud Javascript SDK 3.0-回调无法读取属性'connectCallback
- FB.login访问令牌facebook javascript SDK
- NativeScript nativeescapet谷歌地图sdk不令人惊叹
- Adobe Air SDK在页面加载时调整窗口大小
- 如何在两个不同的iframe HTML之间进行通信
- Loopback AngularJS JavaScript SDK - Gruntfile plugin
- 插件SDK中的动态或计算对象创建
- 通过sdk/system/events在修改请求观测器上测试http
- 如果设置了cookie,则Facebook登录Javascript SDK自动登录
- Rally SDK外部开发Rally环境未定义
- Firefox插件SDK:在侧边栏和主脚本之间通信对象
- Firefox XPCOM和插件SDK通信
- Firefox插件sdk - self中脚本之间的通信.端口不存在
- 有没有一种方法可以让Facebook PHP SDK和Javascript SDK进行通信