首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Firefox中打开一个评论页面?

如何在Firefox中打开一个评论页面?
EN

Stack Overflow用户
提问于 2015-07-15 10:57:26
回答 2查看 166关注 0票数 2

我正在开发一个Firefox (SDK)插件,在某个时候,它需要打开一个内部页面(所以是resource://<addon_id>/data/path/to/some_page.html),并且仍然能够保持与该插件通信的能力。

以下是我到目前为止所采用的策略,但都失败了。

  1. 使用open打开一个新的选项卡,并希望,因为它是一个内部页面,self.port在页面的上下文中对脚本是可用的,它们可以侦听和发出消息。没有用- self根本没有用。
  2. 使用sdk/tabs.open打开一个新选项卡,并注入一个内容脚本。self这一次是可用的,但是没有消息发送或接收到该插件。这似乎是某种安全措施。有趣的是,发送或接收消息的失败是无声的,因此没有将消息转储到控制台。
  3. 使用sdk/tabs.open打开一个新选项卡,直接访问选项卡的(DOM) window对象,并通过window.postMessage API发送/接收消息。这似乎需要调用getBrowserForTab,然后访问contentWindow.wrappedJSObject。但是,在getBrowserForTab .open调用的onOpened处理程序中调用sdk/tabs返回undefined

我卡住了。

使用面板实现这一点似乎要容易得多,但是遗憾的是,这个策略对我来说是不可用的,因为页面需要是非模型的。如何才能做到这一点?

EN

回答 2

Stack Overflow用户

发布于 2015-07-15 18:07:09

使用sdk/tbro.open打开一个新的选项卡,并注入一个内容脚本。self这一次是可用的,但是没有消息发送或接收到该插件。这似乎是某种安全措施。有趣的是,发送或接收消息的失败是无声的,因此没有将消息转储到控制台。

这个方法应该有效,你能提供一些代码和Firefox版本/ jpm版本等等吗?您的代码应该如下所示:

代码语言:javascript
复制
require("sdk/tabs").open({
  url: "./page.html",
  onReady(tab) {
    let worker = tab.attach({
      contentScriptFile: "./content.js"
    });
    // send and received stuff using `worker.port`
  }
});

您也可以使用page-mod实现该功能:

代码语言:javascript
复制
const { data: { url } } = require("sdk/self");

require("sdk/page-mod").PageMod({
  include: url("./page.html"),
  contentScriptFile: "./content.js",
  onAttach(worker) {
    // send and received stuff using `worker.port`
  }
});

// if you want to open the page in a tab immediately
require("sdk/tabs").open("./page.html");

使用page-mod的主要优点是,即使页面没有被加载项打开(因此,如果用户书签URL或在选项卡中手动输入URL等),它也能工作。

我尝试了这两个版本,并且在content.js中同时使用了self.port.onself.port.emit,它就像预期的那样工作--只是弹出一条文本消息。

票数 3
EN

Stack Overflow用户

发布于 2015-07-15 17:00:53

只需将资源url类型加载到浏览器,它就会加载。要沟通,你可以做contentWindow.wrappedJSObject,但尝试使用消息,它更好。我个人使用观察员服务。您甚至可以使用这种方法将您的addon页面点击到您的addon范围:https://gist.github.com/yajd/17ee5b1b98cb717c8429不要按照面板的方式,html页面是我所做的最好的方法。https://github.com/Noitidart/l10n/tree/xhtml-xul实际上使用xhtml,这样您就可以将它本地化。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31428509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档