aep*_*eus 24 javascript hash internet-explorer location reload
我需要修改哈希值,在进行某些处理后将其删除,这样如果用户刷新,则不会导致进程再次运行.
这在FF中工作正常,但似乎IE每次尝试更改哈希时都会重新加载.我认为它与页面上加载的其他内容有关,但我不确定.我有一个iframe加载(与进程相关)以及一些仍在父窗口中提取的脚本.
在所有加载完成后,我似乎无法找到更改哈希的好方法.而且,与此相关的是,它与装载有关.
关于如何解决这个问题的任何想法?
更奇怪的行为:哈希来自其他地方,通过重定向在Web应用程序中.我发现如果我只是手动添加哈希,将#myid添加到url,它不会重新加载.如果我在已加载的页面上输入哈希值(将#myid添加到已存在的URL)或在新选项卡中输入完整URL,则无关紧要.
Jar*_*ook 17
这似乎是Internet Explorer的一个错误(使用7和8测试).
更改window.location.hash不应该导致重新加载,并且使用哈希来维护状态是一种常见的JavaScript技术.
如果您手动加载页面并使用JavaScript更改哈希,它将起作用.
问题是当您从不同的位置重定向到页面时(即:使用HTTP标头"Location"),然后修改散列将导致重新加载.
要解决这个问题,您可以:
1)如果您可以控制重定向,则可以使用某些HTML替换Location标头.
<html>
<head>
<meta http-equiv="refresh" content="0; url=__REDIRECT_LOCATION__">
<script>window.location = "__REDIRECT_LOCATION__";</script>
</head>
</html>
Run Code Online (Sandbox Code Playgroud)
2)如果没有,你可以尝试在加载页面时重新加载页面.要防止重新加载循环,您可能需要设置cookie.
window.location = window.location; // window.location.reload() didn't work.
In pseudo code:
// if is Internet Explorer
// if ( cookie "reloadPerformed" is not set )
// set cookie "reloadPerformed" = "1"
// reload page
// else
// clear cookie "reloadPerformed"
Run Code Online (Sandbox Code Playgroud)
显而易见的缺点是加载页面导致两个页面请求和渲染,因此您将希望重新加载是页面在加载时所做的第一件事.
rjm*_*nro 14
@JarneCook似乎是对的 - 这是IE中的一个错误.
你可能只能这样做:
<script type="text/javascript">
window.location.hash = window.location.hash;
</script>
Run Code Online (Sandbox Code Playgroud)
在页面顶部.在正常情况下,这应该是无操作,但如果用户使用IE并通过重定向到达,页面将在他们甚至注意到已加载之前重新加载.
小智 10
问题是" 哈希来自Web应用程序中通过重定向的其他地方. " 如果您使用javascript重定向客户端中的URL,如下所示:
location.href = 'test1.aspx#testhash'
Run Code Online (Sandbox Code Playgroud)
一切都会安好的 !
所以这是IE的错误:当通过重定向的Web应用程序时,浏览器可能只能看到prev url,因此当您修改时location.hash,浏览器会看到URL更改,因此刷新页面.
Ray*_*Ray -5
在我看来,如果你改变哈希值,你基本上就是在改变页面的位置,所以 IE(或任何浏览器)都会重新加载。你打算如何做到这一点?window.location.hash = "";?
也许 Firefox 足够聪明,可以看到您在做什么并避免刷新。
| 归档时间: |
|
| 查看次数: |
39547 次 |
| 最近记录: |