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(() => 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】:我刚刚找到的超级解决方案。
你必须模拟发布一个空表单。
<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);不刷新页面?