window.location.reload 不适用于 Firefox 和 Chrome

Posted

技术标签:

【中文标题】window.location.reload 不适用于 Firefox 和 Chrome【英文标题】:window.location.reload not working for Firefox and Chrome 【发布时间】:2013-09-28 20:07:01 【问题描述】:

我想在单击按钮时更改用户状态,所以我要做的就是检测当前状态并在需要时进行更改。

但在这种情况下,后端的状态会发生变化,但要显示页面需要刷新的状态,因为刷新时它会检查当前状态并显示。所以我使用“window.location.reload”属性在页面上显示最新状态

在 IE 中一切正常。但在 Firefox 和 Chrome 的情况下,状态不会改变。我认为“window.location.reload”不起作用,因为当我只是评论这一行并尝试单击按钮并手动刷新页面时,它会显示更改状态。

您能否建议我应该使用什么来在 Firefox 和 Chrome 中进行这项工作?

当我用谷歌搜索时,我发现如果你在“setTimeout()”中提供它,它可以在 Firefox 和 Chrome 中运行。我试过了,但即使那样它也不适合我。

<script>

    $(document.body).on('click', '#activate', function () 
        var pkgVersion = $(this).attr('data-version');
        alert("@Url.Action("SetActivePackage", "Deployment")",  version: pkgVersion );
        $.get("@Url.Action("SetActivePackage", "Deployment")",  version: pkgVersion ).done(function () 

        );
         setTimeout(function ()  window.location.reload(data); , 0);
    );
</script>

请推荐!

【问题讨论】:

$.get(stuff).done(window.location.reload); 另外,尝试window.location.reload(true),但不要在这样的超时内,而是在 ajax 调用的成功处理程序中。 setTimeout(location.reload.bind(location), 0); ? 感谢您的调查,我尝试了这两个选项,但没有运气:-(,我还修改了一些代码。它现在是“window.location.reload(data);”,但最后同样的问题它不会自动重新加载 【参考方案1】:

我还有另外两个选择:

history.go(0);

还有:

window.location.href = window.location.href;

我尚未在 Firefox 和 Chrome 上对其进行测试,但它可能会帮助您更快。明天我会做测试并更新答案,如果这不起作用。

【讨论】:

感谢您的调查,我尝试了这两个选项,但没有运气:-(,我还修改了一些代码。它现在是“window.location.reload(data);”,但最后同样的问题它不会自动重新加载 感谢您创建 Fiddle... 真的很喜欢这些示例... 但幸运的是我的问题在 MVC 的帮助下解决了... 无论如何谢谢! 在 Firefox 中,如果您的 URL 中有 hash,则必须将其删除。看看如何做到这一点,例如。这里:***.com/questions/5818269/… 第二个选项适用于 Chrome、FF、Safari 和 Safari Mobile。 谢谢.... 已经搜索了一个小时! history.go 工作...【参考方案2】:

我在 AngularJS 和 Firefox 中遇到了这个问题。 (在 Chrome 中重新加载很好)。 通过使用 setTimeout 问题解决了。

setTimeout(function()
  window.location.reload();
);

【讨论】:

或者简单地说:setTimeout(location.reload) 原来的解决方案对我有用。使用常规的 location.reload() 可以在除 Firefox 之外的所有应用程序中使用,所以我很高兴你发布了这个。 几乎为我工作。在 Firefox 50.1.0 (Ubuntu 16.04) 中,这个答案没有任何作用。但是将其更改为 lambda 表达式就可以了:setTimeout(() =&gt; window.location.reload());.【参考方案3】:

你试过了吗?:

window.location = window.location;

显然你可以放下“窗口”,但我自己没有尝试过。

【讨论】:

这是做什么的? 它会在没有 POST 数据的情况下重新加载页面,而 reload() 将保留 POST 数据,据我所知,这是唯一的区别? 感谢您的调查,我尝试了这两个选项,但没有运气:-(,我还修改了一些代码。它现在是“window.location.reload(data);”,但最后同样的问题它不会自动重新加载【参考方案4】:

我在 Chrome 和 Firefox 中遇到了同样的问题。我能够通过让服务器响应页面的 url 来缓解这个问题。对于您的情况,您可以将响应作为用户状态的新值。举两个例子:

$.post('?action=' + myAction, function (data) 
        window.location.href = data;
    );

..和服务器响应

Response.Write("/yourUrl);
Response.End();

这消除了 Chrome 中的不一致,并且页面重新加载不会失败。

【讨论】:

【参考方案5】:

Look this 您可以通过将 forceGet 参数设置为 true 来强制重新加载以从服务器获取页面:

location.reload(true);

【讨论】:

【参考方案6】:

这对我来说适用于 Fire Fox 和 Crome,并且适用于 IE。

object.reload(forcedReload);

【讨论】:

【参考方案7】:

从我的角度来看,关键点是函数的位置对我来说必须高于调用发起的位置。认为浏览器从上到下解释 javascript,如果我的重新加载代码低于调用它的对象,它就会失败。如果我把代码放在上面,window.location.href = window.location.href;工作。

【讨论】:

当您建议“函数定义必须出现在函数调用之前”时,请注意这仅适用于函数表达式 (var my_function = function()),而不适用于函数声明 (function我的函数())。函数声明被提升,而函数表达式则不被提升;所以当你说'浏览器从上到下编译JS'(首先,浏览器解释JS,它们不编译它)时,这并不完全准确。 很公平,更新以反映解释而不是编译,同意 js 不编译。我添加了详细信息,因为我花了一些时间才弄清楚为什么我无法让页面重新加载,并且我认为我的解决方案可能对其他人很重要,如果他们有类似的问题。感谢老师的回复。【参考方案8】:

我刚刚找到的超级解决方案。

你必须模拟发布一个空表单。

html

<form id="myForm" action='@Url.Action("Details","Main", new  id = @Model.ID  )'></form>

JS

document.getElementById("myForm").submit();

【讨论】:

【参考方案9】:

我尝试了不同的答案,但对我有用的是强制重新加载的参数“真”

setTimeout(()=>
  window.location.reload(true);
);

【讨论】:

以上是关于window.location.reload 不适用于 Firefox 和 Chrome的主要内容,如果未能解决你的问题,请参考以下文章

window.location.reload(false);window.location.reload(true);history.Go区别

window.location.Reload()和window.location.href 区别

window.location.href=window.location.href 和 window.location.reload() 的区别

为啥我在js里面用window.location.reload(true);不刷新页面?

window.location.Reload()和window.location.href 区别

window.location.Reload()和window.location.href 区别