【发布时间】:2011-08-01 04:30:52
【问题描述】:
使用 jQuery,有没有一种方法可以让访问者的每个 http://www.mywebsite.com/page/ 变为 http://www.mywebsite.com/#page,并确保 Facebook URL Linter (http://developers.facebook.com/tools/lint) 仍然能够阅读http://www.mywebsite.com/page/中的标签?
【问题讨论】:
使用 jQuery,有没有一种方法可以让访问者的每个 http://www.mywebsite.com/page/ 变为 http://www.mywebsite.com/#page,并确保 Facebook URL Linter (http://developers.facebook.com/tools/lint) 仍然能够阅读http://www.mywebsite.com/page/中的标签?
【问题讨论】:
我不确定我是否完全理解您的问题。客户端库无法在不导致浏览器从服务器获取不同页面的情况下更改 URL 的路径部分。
所以,如果用户转到 http://www.mywebsite.com/page/,那么您可以使用客户端 javascript 将用户重定向到 http://www.mywebsite.com/#page/,但这会导致浏览器加载页面 http://www.mywebsite.com/,然后尝试查找该页面中的#page 片段。如果您希望浏览器重新加载http://www.mywebsite.com/#page/,那么确实会发生这种情况。
FB 不会在您的页面上运行 javascript,因此如果 FB 转到 http://www.mywebsite.com/page/,它将看到它(它不会像普通浏览器那样被重定向)。
如果你想用 javascript 做一个强制重定向,你可以把这段代码放在你的页面中:
var path = window.location.pathname;
if (path.search(/^\/page\/?$/) >= 0) {
window.location.replace("http://www.mywebsite.com/#page/");
}
此代码测试页面 URL 上的路径名是 /page 还是 /page/,如果是,则进行重定向。
【讨论】:
<script>
$(window).load(function(){
var pieces = location.href.split('/');
if (pieces[3].indexOf('#!') !== 0) {
if (location.href.indexOf('#!') != -1) {
pieces = location.href.replace('#!','').split('/');
}
pieces[3] = '#!/'+pieces[3];
location.href = pieces.join('/');
}
});
</script>
【讨论】: