window.location.href 刷新页面,window.location.reload(true)直接刷新本页

jackxiang 2009-11-17 20:07 | |
论window.location.href = window.location.href刷新页面的问题


在JS中可以用window.location.href = window.location.href来刷新页面(当然还有很多其他的方法),

在使用这个方法刷新页面的时候回出现问题,如下:



   1. <body  onload='alert("aaa");'>  
   2. <script>function refresh()  
   3. {    
   4.        window.location.href = window.location.href;  
   5. }  
   6. </script>  
   7.  
   8. <a href ='#'>###</a>  
   9. <input type ='button' value='button' onclick='refresh();' />  
  10. </body>  

<body  onload='alert("aaa");'>
<script>function refresh()
{  
       window.location.href = window.location.href;
}
</script>

<a href ='#'>###</a>
<input type ='button' value='button' onclick='refresh();' />
</body>



分析这段代码你会发现,当点击###后,再点击Button页面不会刷新。

想必看到这里你已经知道问题所在,就是在点击###后,Url上会加上一个#,

于是refresh()方法就变成了 window.location.href ="www.something.com/test.aspx#"

成为了一个锚点。

我的解决方法也很简单:
Java代码

   1. window.location.href = window.location.href.replace(/#/g,'');  

window.location.href = window.location.href.replace(/#/g,'');


替Url中的换所有#

一般来说这样替换不会有问题,url中一般不含有#,替换后也不会导致链接失效。

PS:虽然只是一个小问题,但开发时还是要注意。


window.location.reload(true)和reload(false)的使用简单比较
reload(true)是从服务端重新拿一下所有的页面组件,像image,css,js都得从拿,所以速度比较慢
reload(false)则是从本地缓存中拿页面组件,但是好像html自身不会缓存,所以一般用reload(false)就可以,具体是不是就不大清楚了
如果超出假设,可以考虑href,assign,replace等方法。

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/2235/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2011-11-23 09:46
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]