使用greasemonkey预加载页面

时间:2012-09-03 09:43:52

标签: javascript firefox greasemonkey preloader

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

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

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

1 个答案:

答案 0 :(得分:3)

您可以在隐藏的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的 Net 面板中的几乎所有内容(包括图像)都具有304 Not Modified的状态 - 这意味着它已被缓存。

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