2010-07-19 97 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放入其中,并立即恢复原状。

我不确定离线存储是否良好,或者不考虑缓存。思考?