2

我见过一些预加载问题,但其中大多数来自拥有网站并希望为用户实现一些预加载的人。我想要做的是使用greasemonkey在一些网站上实现一些预加载以供我自己使用。

我经常光顾的一些网站有像书一样的“页面”。而且有很多页面(在大多数情况下,每页上都有 1 MB+ 的图像)所以我想制作一个greasemonkey 脚本来加载接下来的 1-2 页。下一页的 URL 是可预测的(它们按顺序编号,编号前有前缀)。

我该怎么做呢?有没有办法下载网页(包括所有图像)并让 Firefox 知道它已被缓存?

4

1 回答 1

4

您可以在隐藏的 iFrame 中加载页面。然后它将被缓存(基于服务器和您的 Firefox 设置)。

// ==UserScript==
// @name        _Preload page(s)
// @namespace   _pc
// @include     http://YOUR_SERVER.COM/YOUR_PATH/*
// @require     http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
// @grant       GM_addStyle
// ==/UserScript==

if (window.top != window.self)  //-- Don't run on frames or iframes.
    return;

var preloadPage = "http://cheezburger.com/6555102208";

/*--- Load page in hidden iFrame.
    It will then be cached per FF and server settings.
*/
$("body").append (
    '<iframe class="GM_hiddenIFrame" src="' + preloadPage + '"></iframe>'
);

GM_addStyle ( (<><![CDATA[
    iframe.GM_hiddenIFrame {
        display:        none;
    }
]]></>).toString () );


请注意,window.top != window.self添加了该位,否则脚本可能会在隐藏的 iframe 上触发,从而导致递归(可能是无限的)。


我通过以下方式验证了此作品:

  1. 清除 Firefox 的缓存
  2. 在测试页面上运行此脚本。
  3. 在不同的选项卡中加载cheezburger.com/6555102208
    ... Firebug 的网络面板中的几乎所有内容(包括图像)的状态为304 Not Modified- 这意味着它已被缓存。

    (新的、无缓存的加载返回状态200 OK。)

于 2012-09-03T10:37:54.600 回答