在IE中刷新javascript location.hash

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 足够聪明,可以看到您在做什么并避免刷新。