【问题标题】:Is it possible to create firefox addon ui inside tab?是否可以在选项卡内创建 firefox 插件 ui?
【发布时间】:2014-09-02 19:45:01
【问题描述】:

我有一个想移植到 Firefox 的 chrome 插件。这个插件有一个复杂的用户界面,它占据了整个页面,它的目的是长时间打开和使用,以及在浏览器中打开的其他页面。在 chrome 中,我只打开“.html”插件接口文件,它可以访问所有插件 api:与插件脚本等通信。但是如果我在 firefox 插件中打开“.html”文件:

var root = data.url('icon.png').split('/').slice(0, -2).join('/');
widget.Widget({
  id: 'my-addon',
  label: 'my addon',
  contentURL: data.url('icon.png'),
  onClick: function() {
    tabs.open([root, 'lib', 'control.html'].join('/'));
  }
});

页面内的javascript代码似乎无法访问this.port对象进行通信。创建全页插件界面的正确方法是什么?我是否需要通过contentScriptFile 单独注入javascript代码(非常糟糕,因为这在chrome中完全不可能,我将无法对两个插件使用相同的代码)或使用某种特殊类型的Panel 所以它会全屏?

【问题讨论】:

  • 我还在寻找一种方法来加载我的 html 页面,该页面具有完整的 chrome 访问权限。我不知道该怎么做。我现在做事的方式有点糟糕。我听页面加载,如果它是我的 html 页面而不是我 addEventListener 的全部内容。我不喜欢这种方法。
  • @Noitidart 如果您愿意,可以发布一个非插件 SDK 问题。我不会在这里回答我的问题,因为 XUL/restartless 附加组件中的工作方式完全不同。

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


【解决方案1】:

您可以在选项卡中打开 html 页面,然后使用 tab.attach 附加实际脚本。这样,您的脚本将是可以访问内容脚本 API 的实际内容脚本。

widget.Widget({
  id: 'my-addon',
  label: 'my addon',
  contentURL: data.url('icon.png'),
  onClick: function() {
    tabs.open({
      url: data.url("control.html"),
      onOpen: function(tab) {
        tab.attach({
          contentScriptFile: [data.url("control.js")],
          onMessage: function() {}
        });
      }
    });
  }
});

它很难看,但它应该可以工作(一般来说,我实际上并没有尝试示例代码)。

【讨论】:

  • contentScriptFiletabs.open不一样吗?
  • 文档没有提到 contentScript*tabs.open() 的有效选项,所以即使有这样一个未记录的 API,在正式记录之前我也不想使用它。
猜你喜欢
  • 2016-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多