2012-09-03 56 views
2

我見過一些預加載問題,但其中大多數來自擁有網站並希望爲用戶實施一些預加載的人員。我想要做的是在一些使用greasemonkey的網站上實現一些預加載以供我自己使用。使用greasemonkey預加載頁面

我經常有幾個網站有像書一樣的「頁面」。並且有很多頁面(大多數情況下,每個頁面上都有1 MB +圖像),所以我想製作一個greasemonkey腳本來加載下一頁1-2頁。下一頁的URL是可預測的(它們在數字之前按照前綴的順序編號)。

我應該怎麼做呢?有沒有辦法下載一個網頁(包括所有圖像),讓Firefox知道它已被緩存?

回答

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的面板 - 包括圖像 - 具有304 Not Modified狀態 - 這意味着它被緩存。

    (A新鮮,緩存較少,負載返回狀態200 OK。)

+0

不Greasemonkey的適用於每一頁「已下載」,即使它不看?我只是修改了一下你的代碼來解析URL並增加數字(例如'http:// somepage.com/read/1','http:// somepage.com/read/2'等等)並使用你的代碼,我在Firebug看到它獲得1,獲得2,獲得3,獲得4等至少8+頁(即使不存在的頁面,如最後一頁是20但它獲得28)。沒有它,它只會獲得當前頁面。 – Jack

+0

問題不明確。你的意思是「Greasemonkey是否在隱藏的iframe上觸發?」如果是這樣,請參閱[這個答案](http://stackoverflow.com/a/12118558/331508)(和類似的)。 ...如果沒有,請澄清。如果需要編輯您的問題和/或使用格式。 –

+0

嗯,我的意思是每個頁面只加載一次greasemonkey腳本的權利?如果刷新它,它會再次加載,腳本所做的任何操作都會再次完成。使用您的示例'http:// cheezburger.com/6555102208',我基本上只是添加了一些代碼來增加頁碼,因此下一頁是'6555102209','6555102210','6555102211'等。完全按照您的代碼使用除了更改URL並添加計數器增量外,它正在獲取(GET請求),直到接下來的10頁。所以我猜GM腳本每頁都會運行一次,即使我沒有查看它,也會「預加載」。 – Jack