当前位置:软件学习 > FrontPage >>

JS页面刷新当前页面的一些研究

毫不犹豫的使用了以下JS代码

 代码如下 复制代码

parent.window.location.reload();

解释下为什么要parent,因为交互操作是在页面提交表单到页面一个隐藏iframe,交互完成后需求刷新当前页面,所以用parent,调用回当前的页面来刷新。

逻辑上没什么问题,确实使用起来也实现了页面刷新。

后来一次无意之中,用FF来执行上面的操作(之前的开发一直是用chrome,我的主浏览器也是chrome),出现了下面一幕


但是chrome就没这问题。这种提示,一般是因为有post过去的数据页面重新刷新才会出现的,但是我刷新当前页,为什么会有数据post呢,让我相当郁闷。

后来百度了一下,发现window.location.reload()这种方法被很多人诟病,原因是当window.location.reload()刷新当前页时,页面里面的iframe也会一并刷新,而FF是会记录iframe曾经打开过的页面的,所以我刷新当前页时,相当于把我刚才提交到iframe的那个处理页在iframe里面又执行一次,故出现上面的情况。

唉,看来又是一个浏览器兼容的hack,真不知说FF强大还是有毛病好......记录iframe页面干嘛!

这里有个DEMO来测试FF下用window.location.reload()刷新当前页是会让iframe也一起刷新的。

当你每次都点重新发送的话,FF将会不断alert和不断弹出这个提示,可以说是死循环...

于是没有办法阿,只能找方法解决呗,网上有解决方案是

 

 代码如下 复制代码
parent.window.location.href = parent.window.location.href;


但如果当前页面有锚点的话,这个方法行不通(因为url有锚点的话,是不会刷新的,不懂的话自己扫盲吧)

于是我把上面方法改进了,写成

下面是PHP代码:

 代码如下 复制代码


echo "<script>parent.window.location.href = '{$_SERVER['HTTP_REFERER']}';</script>";


把referer当做刷新的url。因为都是提交处理页到隐藏iframe,所以referer肯定是当前页不会错;取referer的话,因为不会取到锚点所以实现刷新功能也没有问题。


刷新页面的几种方法:

 代码如下 复制代码

1    history.go(0)
2    location.reload()
3    location=location
4    location.assign(location)
5    document.execCommand('Refresh')
6    window.navigate(location)
7    location.replace(location)
8    document.URL=location.href

自动刷新页面的方法:
1.页面自动刷新:把如下代码加入<head>区域中
<meta http-equiv="refresh" content="20">
其中20指每隔20秒刷新一次页面.

2.页面自动跳转:把如下代码加入<head>区域中
<meta http-equiv="refresh" content="20;url=http://www.wyxg.com">
其中20指隔20秒后跳转到http://www.wyxg.com/页面

3.页面自动刷新js版
<script language="JavaScript">
function myrefresh()
{
       window.location.reload();
}
setTimeout('myrefresh()',1000); //指定1秒刷新一次
</script>

ASP.NET如何输出刷新父窗口脚本语句
1.   this.response.write("<script>opener.location.reload();</script>"); 

2.   this.response.write("<script>opener.window.location.href = opener.window.location.href;</script>");  

3.   Response.Write("<script language=javascript>opener.window.navigate(''你要刷新的页.asp'');</script>")


JS刷新框架的脚本语句

//如何刷新包含该框架的页面用  
<script language=JavaScript>
   parent.location.reload();
</script>  

//子窗口刷新父窗口
<script language=JavaScript>
    self.opener.location.reload();
</script>
( 或 <a href="javascript:opener.location.reload()">刷新</a>   )
//如何刷新另一个框架的页面用  
<script language=JavaScript>
   parent.otherFrameID.location.reload();
</script>

如果想关闭窗口时刷新或者想开窗时刷新的话,在<body>中调用以下语句即可。
<body onload="opener.location.reload()"> 开窗时刷新
<body onUnload="opener.location.reload()"> 关闭时刷新
<script language="javascript">
window.opener.document.location.reload()
</script>

补充:网页制作,Frontpage 
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,