我几周前刚建立了一个系统来完成这个任务
根据浏览器的不同,你需要检测哈希值,以下是如何实现:
// test all possible places hash could be on different browsers
if(window.location.hash){
hash = window.location.hash;
} else if (document.location.hash){
hash = document.location.hash;
} else if (location.hash){
hash = location.hash;
}
// some browsers start the hash with #, remove it for consistency
if(hash.substring(0,1) == '#'){
hash = hash.substring(1,hash.length);
}
if(hash = 'pageA'){
document.getElementById('mainContentDiv').innerHTML = '<p> content for the page displayed when the hash sais pageA</p>';
}
这种情况偶尔会出现。Youtube使用哈希值链接到视频中特定的时间戳。
编辑:我曾经认为,如果用户在地址栏中手动编辑哈希值,页面不会重新加载,甚至JavaScript也无法知道它已经改变了。但我错了。我在Youtube上试过了,它可以正常工作。
setInterval
来实现检测手动片段标识符更改。 - Jason Harwig是的 - 当内容是通过AJAX驱动时,处理页面状态到URL持久性已成为一种常见模式。
Javascript可以通过window.location.hash访问此值。完成后,您可以根据哈希值执行任何操作
实际上,任何DHTML效果都可以。
这个问题的答案与以下问题的答案或多或少相同:
总之,你可能想要查看的两个项目是:
jQuery History(使用哈希来管理页面状态并绑定更改以更新页面)。
jQuery Ajaxy(jQuery History的ajax扩展,允许完全的ajax网站同时完全无侵入和优雅降级)。
由于JavaScript可以访问URL字符串,因此它当然可以针对URL内容采取不同的操作。
我偶尔看到过这样的东西,但我认为除非在非常特定的用途中,否则这不是一种好的反应方式。
我记得其中一个用途是TiddlyWiki使用哈希的后部分来设置页面呈现和其他方面的首选项。
在 AJAX-heavy 应用程序(比如 Gmail)中,让所有 AJAXy 的东西都能够被书签或链接到特定页面是相当普遍的。如果他们不这样做,那么这将被认为是对可用性的不利影响。通过执行 window.location.hash
,很容易获取 URL 哈希 - 因此,您可以在页面加载时使用类似于 switch 的语句来执行特定的 JavaScript 函数集,如果哈希存在。
一些实现此功能的 jQuery 插件:history/remote,history。