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代码:
代码如下 | 复制代码 |
|
把referer当做刷新的url。因为都是提交处理页到隐藏iframe,所以referer肯定是当前页不会错;取referer的话,因为不会取到锚点所以实现刷新功能也没有问题。
刷新页面的几种方法:
代码如下 | 复制代码 |
1 history.go(0) 自动刷新页面的方法: 2.页面自动跳转:把如下代码加入<head>区域中 3.页面自动刷新js版 ASP.NET如何输出刷新父窗口脚本语句 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>")
//如何刷新包含该框架的页面用 //子窗口刷新父窗口 如果想关闭窗口时刷新或者想开窗时刷新的话,在<body>中调用以下语句即可。 |
补充:网页制作,Frontpage