2010-07-19 67 views
0

有沒有方法,JavaScript腳本或任何可以允許預加載頁面中的超鏈接?例如,我希望當用戶來到http://ahostel.lt/並且頁面完全加載時,腳本將開始在導航中預加載其他頁面(預訂,地圖,設施,環視,[...])。所以當用戶點擊任何超鏈接時,頁面會立即加載。如何做到這一點?preload =「true」超鏈接

+0

頁面是否在同一個域上? – 2010-07-19 22:01:44

+0

是的。假設我們正在談論http://ahostel.lt – Gajus 2010-07-19 22:03:26

+0

[預加載HTML網頁或非Flash網絡應用程序?](http://stackoverflow.com/questions/3275056/preloading-of-html-web -page-or-flash-web-applications) – Wrikken 2010-07-19 22:07:46

回答

1

雖然目前只有Firefox支持,但HTML5規範中實際上已經規定了這一點。

<link rel="next" href="page2.html"> 

只是把它作爲一個非JavaScript的替代品扔給你。

+0

我想你還需要指明預取屬性http://browserspy.dk/prefetch.php。 – Gajus 2010-07-19 22:57:10

2

你可以做這樣的事情:

$(function() { 
    $('a').each(function() { 
    new Image().src = $(this).attr('href'); // or just this.href 
    }); 
}); 

他們不是圖像,但瀏覽器並不知道。您可能要慢下來一點,以免嗆連接太多:

$(function() { 
    var urls = $('a').map(function(_, a) { return a.href; }).get(0); 
    var i = 0; 
    function fetchOne() { 
    if (i === urls.length) return; 
    var img = new Image(); 
    img.load = fetchOne; 
    img.src = urls[i++]; 
    }; 
    fetchOne(); 
}); 

編輯 — @Adam使有關「危險」的鏈接來獲取一個很好的點。將某些鏈接標記爲「noPrefetch」(作爲類或某物)可能會更好,或者也可以只將預取鏈接標記爲「prefetch」類。

+0

*咳嗽*'this.href' *咳嗽* :) – 2010-07-19 22:05:41

+0

不,不。 jquery在這裏受到歡迎。 :)雖然這會工作嗎? – Gajus 2010-07-19 22:06:33

+0

確定尼克 - 我感覺到你正在迷你討伐:-) – Pointy 2010-07-19 22:08:34

1

還沒有嘗試過,但基於this blog post,你可以做到以下幾點:

$("a").each(function(){ 
    $.ajax({ url:$(this).attr("href"), cache:true, dataType:"text" }); 
}); 

你應該小心但如果你有一個像註銷用戶可以得到註銷鏈接。 See Wikipedia for more problems with prefetching

+0

@adam這真是一個好點 – Pointy 2010-07-19 22:09:30

+0

嗯,我想讓客戶端選擇預取哪些頁面,例如用選擇器$('a [prefetch =「true」]')。但是,問題在於,每次用戶轉到導航中的其他頁面時,它都會嘗試預取所有頁面。 – Gajus 2010-07-19 22:12:33

+0

這些預取問題都是真實的,但如果您正在討論從您自己的站點預取自己的頁面,其中大部分都是沒有實際意義的。如果鏈接不是*自己的網站,那麼我完全同意這是一個非常粗魯的做法。 – Pointy 2010-07-19 22:13:10

0

將此與離線存儲概念相結合,您就有贏家。您可以預取所有主要導航頁面,並且這些頁面的每個着陸頁都可以預取下一個導航頁面等,並放置在離線存儲中(window.localStorage或window.sessionStorage)。對於JSON等來說會很好。你可以比緩存更好地控制需要過期或不需要的時間,因爲你的密鑰可能包含時間戳指示符。可能更適合於不需要每次加載產品目錄的電子商務網站。例如,您可以將JSON放入其中,並立即恢復原狀。

我不確定離線存儲是否良好,或者不考慮緩存。思考?