从script.js mozilla addon-sdk访问当前标签页组件

时间:2015-07-23 11:12:02

标签: javascript jquery html firefox-addon firefox-addon-sdk

我刚开始使用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个声望。请帮忙。

1 个答案:

答案 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.jspanel.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

所以在你的情况下:

  1. some-content-script.js中访问该标签并获取您的数据。
  2. 使用面板的内置端口(panel.port.emit('TAG', 'DATA'))将该数据发送到面板的some-content-script.js
  3. 使用面板的内置端口(panel)拦截self.port.on('TAG', function interceptor (data) {}(附加到data)中的数据。
  4. 'DATA'函数内使用interceptor变量(包含.js字符串)执行您想要的操作。
  5. 您还可以将多个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

    panelpanel.port的端口为panel,而内容脚本侧self.port的端口称为...port.on

    ...port.once(和...port.emit)用于拦截来自端口的邮件,而[{"text":" my NEW option)","id":"0"}]用于在端口上发布邮件。