我刚开始使用Addon-SDK学习firefox插件开发。我正在开发一个带按钮的插件。当我点击该按钮时,会显示一个面板,并在面板中加载一个页面。 面板代码如下:
var panels = require("sdk/panel");
var panel = panels.Panel({
contentURL: self.data.url("mypage.html"),
height:380,
width:300
});
现在我想从" script.js"访问浏览器当前标签页的组件(例如输入类型文本)。包含在" mypage.html"中的文件。我不能发布图片,因为我只有6个声望。请帮忙。
答案 0 :(得分:0)
在index.js
(或main.js
)中:
panel.port.emit('TAG', 'MSG');
在'MSG'
的端口上发送panel
条消息,标记为'TAG'
。
在script.js
中(进一步阅读以了解此文件的内容):
self.port.on('TAG', function ( msg ) {
alert(msg);
});
侦听脚本专用端口上的所有消息(此处为panel
提供的端口,script.js
已附加到该端口),标记为'TAG'
。
向后:self.port.emit
中的script.js
,panel.port.on
中的index.js
...
您需要采用此方法 ,以便在主要附加脚本和面板注入的内容脚本之间进行通信。
也!为了使其有效,您需要将HTML文件(mypage.html
)与javascript
内的var panel = require('sdk/panel').Panel({
contentURL: self.data.url('mypage.html'), // var self = require("sdk/self")
contentScriptFile: self.data.url('some-content-script.js')
});
分开:
index.js
所以在你的情况下:
some-content-script.js
中访问该标签并获取您的数据。panel.port.emit('TAG', 'DATA')
)将该数据发送到面板的some-content-script.js
。panel
)拦截self.port.on('TAG', function interceptor (data) {}
(附加到data
)中的数据。'DATA'
函数内使用interceptor
变量(包含.js
字符串)执行您想要的操作。您还可以将多个panel
内容脚本文件附加到var panel = require('sdk/panel').Panel({
contentURL: self.data.url('mypage.html'),
contentScriptFile: [self.data.url('script_1.js'),
self.data.url('script_2.js')]
});
,如下所示:
index.js
在panel
侧panel.port
的端口为panel
,而内容脚本侧self.port
的端口称为...port.on
。
...port.once
(和...port.emit
)用于拦截来自端口的邮件,而[{"text":" my NEW option)","id":"0"}]
用于在端口上发布邮件。