【问题标题】:Firefox add-on get the tab body contentFirefox 插件获取标签正文内容
【发布时间】:2011-12-20 02:18:47
【问题描述】:

大家好,我有一个关于 Firefox 插件的问题:

例如,我如何从选项卡中获取正文内容。

var content = require("tabs").activeTab.documentContent.body.innerHTML;

非常感谢。

【问题讨论】:

  • 您是否发现它是否适用于 SDK?

标签: tabs firefox-addon firefox-addon-sdk


【解决方案1】:

插件 SDK 不允许直接访问选项卡内容 - 其想法是插件和选项卡最终可能最终存在于不同的进程中。您所做的是将内容脚本注入选项卡以获取必要的数据,如下所示:

var tab = require("tabs").activeTab;
tab.attach({
  contentScript: "self.postMessage(document.body.innerHTML);",
  onMessage: function(data)
  {
    console.log("Tab data received: " + data);
  }
});

【讨论】:

  • 完美的例子,怎么做那个 whitout postMessage 消息? (页面中不显示消息)。
  • 你没有,正如我所说的,你不能直接访问标签内容——至少在使用官方 API 时不能。
  • 好的,完美...我怎样才能关闭出现的消息?
  • Marcos:不确定你的意思 - postmessage 不会向用户显示任何内容。
  • 好吧,抱歉...我在页面中关闭了一段时间。正如我在另一篇文章中看到的那样,SDP(相同域策略en.wikipedia.org/wiki/Same_origin_policy)在这种情况下会受到影响。获取内容的唯一方法是使用插件修改文档以提醒文档内容。
【解决方案2】:

你可以试试这个:

var tabs = require("sdk/tabs");
var { getTabForId, getTabContentWindow } = require ("sdk/tabs/utils");
var tab = require("tabs").activeTab;
var window = getTabContentWindow (getTabForId(tab.id));
var content = window.document.body.innerHTML;

但也许this answer 更好。

【讨论】:

    【解决方案3】:

    您可以使用以下命令(在DOMContentLoaded 之后)获取当前选定选项卡的正文:

    gBrowser.contentDocument.body.innerHTML
    

    注意:这仅适用于标准扩展,不适用于 SDK。

    【讨论】:

    • 不错,我在哪里得到变量 gBrownser?
    • 这个问题专门与 SDK 有关,因此像您这样的典型扩展模式将不起作用。不幸的是,实际的解决方案(见下文)有点复杂。
    • @canuckistani:当这个答案已经发布时,我添加了 SDK 标签,OP 并没有真正说清楚 - 所以我认为 -1 在这里不合理。
    • 弗拉基米尔 - 啊,好的。希望我能把它拿回来,但我等得太久了。 @lwburk - 对不起!
    • @canuckistani - 我编辑了,我认为如果你愿意,你可以撤回你的投票。无论哪种方式都不要担心,因为我显然弄错了。
    猜你喜欢
    • 2012-01-01
    • 1970-01-01
    • 2017-07-24
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    • 2013-10-10
    相关资源
    最近更新 更多