防止直接进入标签网址

时间:2014-08-01 11:31:12

标签: javascript php jquery

我想知道是否有可能阻止用户直接使用标签网址,我的意思是以下示例。

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,则该邮件将不会吐出。

提前致谢。

3 个答案:

答案 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);

DEMO

答案 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!');
}