【问题标题】:How to load a document in background?如何在后台加载文档?
【发布时间】:2012-06-26 07:06:56
【问题描述】:

我正在尝试编写一个 Firefox 扩展程序,通过预加载序列项、对其进行预处理并根据请求显示来加快浏览页面序列的速度。

有没有办法从特权扩展代码在后台加载和处理任意网页的 DOM(在当前打开的同一站点上)?

理想情况下,文档的 javascript 应该像在普通浏览器窗口中一样工作。我怀疑这需要一个隐藏的窗口。那个 javascript 上的上下文不应该是特权的。 加载应该允许用户在所有可见的浏览器窗口中继续正常浏览。

我不喜欢将 iframe 注入当前打开的文档并使其可选地可见的想法(Webcomic reader userscript 使用的原则)

【问题讨论】:

    标签: firefox-addon


    【解决方案1】:

    从附加 SDK 中,page-worker 模块可能接近您的需要:

    page-worker 模块提供了一种方法来创建一个永久的、不可见的 页面并访问其 DOM。

    也就是说,我不知道是否可以将该不可见页面加载到(当前或新)选项卡/窗口中。您可能能够将当前标签的document.body 替换为页面工作者的标签。可能。如果合法的话。

    【讨论】:

    • 已签出 SDK。对于我的小型扩展来说,这似乎是一种矫枉过正。此外,page-worker 依赖于 HiddenFrame,它反过来在隐藏窗口全局静态对象中创建 iframe。
    • 到目前为止,我无法让 iframe 加载目标,这可能是由于命名空间或访问权限混乱。还在尝试。
    【解决方案2】:

    您可以使用轻量级浏览器扩展来收集加载页面上的所有链接,并使用链接标签来预取每个链接的内容,浏览器将在后台加载这些页面:https://developer.mozilla.org/en/Link_prefetching_FAQ

    如果您需要预加载页面并从扩展区域访问其 DOM,您可以使用附加 SDK 中的 Page Worker API:https://addons.mozilla.org/en-US/developers/docs/sdk/1.0/packages/addon-kit/docs/page-worker.html

    【讨论】:

    • 我喜欢这个主意。不幸的是,它不提供 DOM 访问。
    • @Basilevs - 请参阅我对上面答案所做的编辑! :)
    • 这正是 Slanec 的建议。
    【解决方案3】:

    我相信是的。假设您的 javascript 已经在运行

    var doc = gBrowser.selectedBrowser.contentDocument;
    

    将获取已加载选项卡的文档,然后您可以对其进行处理并按照您的意愿使用它。在后台执行此操作并保持应用响应是另一回事:)

    【讨论】:

    • -1 as return object is 1. visible 2.foreground 3. 当前打开的url(不是任意的)
    • 最初完全误读了您的 Q,但您所说的可见是什么意思?
    • 我的意思是返回的文档是现在向用户显示的文档。因此,如果我更改它,用户将受到更改的影响。我想要一种在不影响用户浏览的情况下加载页面的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-09
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    • 2018-11-16
    • 2014-02-05
    相关资源
    最近更新 更多