【发布时间】:2011-08-29 21:55:45
【问题描述】:
我看到一些网站基于 URL 中的 has 执行 JavaScript 函数。例如,
当我访问http://domain.com/jobs#test时
然后网站执行一个基于#test的函数
我可以通过检查 location.href 来做到这一点,但是有更好的方法吗?
【问题讨论】:
-
你问对了朋友(y)的问题
标签: javascript function hash
我看到一些网站基于 URL 中的 has 执行 JavaScript 函数。例如,
当我访问http://domain.com/jobs#test时
然后网站执行一个基于#test的函数
我可以通过检查 location.href 来做到这一点,但是有更好的方法吗?
【问题讨论】:
标签: javascript function hash
这就是我的工作:
window.onload = function(){
var hash = (window.location.hash).replace('#', '');
if (hash.length == 0) {
//no hash do something
}
else {
//else do something with hash
}
}
演示:http://jsfiddle.net/maniator/XCjpy/show/#test
演示2:http://jsfiddle.net/maniator/XCjpy/show/
演示3:http://jsfiddle.net/maniator/XCjpy/show/#testing_again
【讨论】:
如果您不需要支持 IE6 和 IE7 等旧浏览器,您可以使用:
window.onhashchange = function(){
switch(location.hash) {
case '#hash1':
//do something
break;
case '#has2':
//do something else
break;
}
}
但如果你必须支持旧浏览器,你需要轮询:
var oldHash = location.hash;
setInterval(function(){
if(location.hash !== oldHash){
oldHash = location.hash;
//hash changed do something
}
}, 120);
【讨论】:
hashChanged 用于window.onhashchange = hashChanged。你在body标签末尾的script标签中调用相同的函数hashChanged()
$(window).bind('hashchange', function() {
var hash = document.location.hash;
var func = hash.replace('#', '');
eval(func + '()');
});
function asdf() {
alert('asdf function');
}
function qwerty() {
alert('qwerty function');
}
注意:eval() 很危险。您应该创建一个预定义的安全函数数组,然后调用它们。
【讨论】:
eval,然后告诉不要使用它?不错:)
看看This。
查看属性表。
location.hash 应该可以帮到你。
【讨论】:
您可以使用 YUI 之类的库来更优雅地执行此操作,看看 YUI 浏览器历史管理器
【讨论】: