如何检测浏览器url变化

时间:2014-10-31 15:08:35   收藏:0   阅读:2128

用户通过“点击触发”,“操作历史”,“直接访问URL”的方式修改当前URL。这三种触发方式会使浏览器做出不同的行为

html5提供了两种方式在页面中操作历史

提供检测历史记录变化的事件popstate

利用这一特性, 就可以处理无刷新页面的前端后退,保存历史操作的页面状态啦。

demo一下

<a href="#1">text1</a>
<a href="#2">text2</a>
<a href="#3">text3</a>
<a href="#4">text4</a>
<a href="#5">text5</a>

<script>

window.addEventListener(‘popstate‘, function(event) {
  readState(event.state);
});

for(i=0;i<5;i++){
    var stateObject = {id: i};
    var title = "Wow Title "+i;
    var newUrl = "/my/awesome/url/"+i;
    history.pushState(stateObject,title,newUrl);
}

function readState(data){
  alert(data.id);
}
</script>

  

hashchange

在URL的参数列表(及URL中"#"号后面的所有字符串)发生变化的时候触发, hash的变化不会触发浏览器请求资源, 也作为ajax保留浏览器历史的解决方案之一。 

兼容如下:

URL中"#"后面的字符串改变时也会触发popstate事件

在IE6、7下可以采用定时循环检测或者采用添加隐藏iframe的方式来解决, 如: 

if( (‘onhashchange‘ in window) && ((typeof document.documentMode===‘undefined‘) || document.documentMode==8)) {
    // 浏览器支持onhashchange事件
    window.onhashchange = hashChangeFire;  // TODO,对应新的hash执行的操作函数
} else {
    // 不支持则用定时器检测的办法
    setInterval(function() {
        // 检测hash值或其中某一段是否更改的函数, 在低版本的iE浏览器中通过window.location.hash取出的指和其它的浏览器不同,要注意
     var ischanged = isHashChanged();  
        if(ischanged) {
            hashChangeFire();  // TODO,对应新的hash执行的操作函数
        }
    }, 150);
}

 

  

 

 

 

 

 

 

原文:http://www.cnblogs.com/mininice/p/4064901.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!