【问题标题】:How to execute a js function based on url hash url#nameoffunction如何基于url hash url#nameoffunction执行一个js函数
【发布时间】:2011-08-29 21:55:45
【问题描述】:

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

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

然后网站执行一个基于#test的函数

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

【问题讨论】:

  • 你问对了朋友(y)的问题

标签: javascript function hash


【解决方案1】:

这就是我的工作:

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

【讨论】:

  • 你救了我朋友 (y)
【解决方案2】:

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

【讨论】:

  • // 感谢您的输入。我不知道有这样的事件,但是..我想做的是通过检查哈希标签在 onload 或 domready 时执行一个函数。我对其进行了测试,但是当我访问带有哈希标签的 url 时,onhashchange 不会触发。不过,我很感谢您的意见。
  • 您可以设置一个函数hashChanged 用于window.onhashchange = hashChanged。你在body标签末尾的script标签中调用相同的函数hashChanged()
【解决方案3】:

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() 很危险。您应该创建一个预定义的安全函数数组,然后调用它们。

【讨论】:

  • 在答案中输入eval,然后告诉不要使用它?不错:)
【解决方案4】:

看看This
查看属性表。
location.hash 应该可以帮到你。

【讨论】:

    【解决方案5】:

    您可以使用 YUI 之类的库来更优雅地执行此操作,看看 YUI 浏览器历史管理器

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-14
      • 2014-05-17
      • 1970-01-01
      • 1970-01-01
      • 2022-11-28
      • 2023-03-22
      • 2016-08-18
      相关资源
      最近更新 更多