如何基于url hash url #nameoffunction执行js函数

时间:2011-05-20 19:11:04

标签: javascript function hash

我看到一些网站在URL中执行基于has的JavaScript函数。例如,

当我访问http://domain.com/jobs#test

然后网站执行基于#test

的功能

我可以通过检查location.href来做到这一点,但有更好的方法吗?

5 个答案:

答案 0 :(得分:10)

这就是我的所作所为:

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
demo2:http://jsfiddle.net/maniator/XCjpy/show/
demo3:http://jsfiddle.net/maniator/XCjpy/show/#testing_again

答案 1 :(得分:3)

如果您不需要支持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);

答案 2 :(得分:2)

<强> Live Demo

$(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()很危险。您制作预定义的安全功能数组,并调用它们。

答案 3 :(得分:1)

看看This
请参阅物业表 location.hash应该帮助你。

答案 4 :(得分:0)

您可以使用像YUI这样的库来更优雅地执行此操作,请查看YUI浏览器历史记录管理器

http://developer.yahoo.com/yui/history/