Javascript 如何使用URI中的散列(#)执行函数?

Javascript 如何使用URI中的散列(#)执行函数?,javascript,jquery,html,url,url-rewriting,Javascript,Jquery,Html,Url,Url Rewriting,例如,如果我的HTML页面中有两个js函数,分别名为func1()和func2()。我的问题是,当有人访问/url/to/page#tag1和/或类似的func2()时,我如何执行func1(),当有人访问/url/to/page#tag2时,这非常简单!您可以通过谷歌搜索找到它,但基本上,您只需使用全局窗口哈希字符串,并根据其值调用所需的函数: if(window.location.hash === '#tag1') { func1() } else if (window.location

例如,如果我的HTML页面中有两个js函数,分别名为
func1()
func2()
。我的问题是,当有人访问
/url/to/page#tag1
和/或类似的
func2()
时,我如何执行
func1()
,当有人访问
/url/to/page#tag2
时,这非常简单!您可以通过谷歌搜索找到它,但基本上,您只需使用全局窗口哈希字符串,并根据其值调用所需的函数:

if(window.location.hash === '#tag1') {
  func1()
} else if (window.location.hash === '#tag2'){
  func2()
}
更新版本:(危险和缓慢)


您应该避免使用eval,因为它会打开安全漏洞,并允许攻击者在用户的计算机上运行恶意代码。您可以阅读有关eval函数的更多信息,以及为什么您永远不应该在上使用它

到目前为止您做了哪些尝试?这似乎很容易如果有一个名为window.location.hash的全局变量,它是一个函数,然后执行它。如果有20个标记…?Andreas是对的,这个扩展非常糟糕如果你有20个标记来运行20个不同的函数,你应该在设计上犯了错误。“我看不出有什么必要扩展它,如果你仍然试图做这样糟糕的事情,你最终会使用像eval()函数这样的糟糕做法,你最终会得到一个非常糟糕的代码,至少可以这么说。”Andreas我编辑了Hamed answer,更新了版本,有点动态,我盲目地写了它,但是它可以是动态的。@HamedBaatour为什么你认为
eval
是一种不好的做法?
var number = window.location.hash.split('#tag').pop(); //return 1
if(window.location.hash === '#tag' + number) {
eval("func" + number + "()");
}