我想知道是否有可能阻止用户直接使用标签网址,我的意思是以下示例。
https://example.com/#this
我可以阻止用户在URL中输入时直接去那里。我读了一些关于
的东西var hash = window.location.hash;
我尝试了以下示例:
var hash = window.location.hash;
if(hash == "#test"){
alert("You're not allowed to go here");
}
这很好用,但是当标签改变时,该脚本是无用的。
例如,在页面中,我有两个主题标签URL #test
和#anothertest
var hash = window.location.hash;
if(hash == "#test" || hash == "#anothertest"){
alert("You're not allowed to go here");
}
让我们说用户正在他的浏览器https://example.com/#test
中输入该消息将按预期吐出。但是,如果用户将标签更改为anothertest
,则该邮件将不会吐出。
提前致谢。
答案 0 :(得分:0)
您需要收听活动hashchange
。因此,只要URL中的哈希值发生变化,事件就会触发。
window.addEventListener('hashchange', function() {
var hash = window.location.hash;
if(hash == "#test" || hash == "#anothertest"){
alert("You're not allowed to go here");
}
}, false);
答案 1 :(得分:0)
你可以这样做:
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<a href="#ccc">go to ccc</a>
<a href="#aaa">go to aaa</a>
<a href="#bbb">go to bbb</a>
<br />
<br />
<br />
<br />
<br /><br /><br /><br /><br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br /><br /><br /><br /><br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br /><br /><br /><br /><br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br /><br /><br /><br /><br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<a id="aaa">aaa</a><br />
<a id="bbb">bbb</a><br />
<a id="ccc">ccc</a><br />
<script type="text/javascript">
var elements = document.getElementsByTagName('a');
for(var i = 0, len = elements.length; i < len; i++) {
elements[i].onclick = function () {
pos = this.href.indexOf("#");
if (pos != -1) {
hash = this.href.substr(pos+1);
if(hash == "aaa" || hash == "bbb"){
alert("You're not allowed to go here");
return false;
}
}
}
}
</script>
</body>
</html>
但是,我不明白使用它的目的是什么。
最重要的是return false;
,因为如果您在警报后用户不会滚动到哈希位置,则不会这样做。
<强> DEMO 强>
答案 2 :(得分:0)
Rhail的解决方案不断检查哈希变化。
这是一个只在初始加载
上查找坏哈希数组的哈希值的变体var bad_hashes = ['#bad1','#bad2'];
if (bad_hashes.indexOf(hash) != -1){
alert('bad hash!');
}