history.back();不会触发$(document).ready();

22

我有一个网页,使用 $(document).ready() 来构建界面。然后用户可以进入子页面,要返回到原始页面,可以按浏览器的“前一页”按钮或页面中的“返回”按钮,这会触发 history.back();。回到原始页面时,$(document).ready()没有触发,所以页面上缺少信息。

有没有办法自动触发它,就像是一个“真正的加载”一样?

编辑

在其中放置一个提示,提示弹出,但我的界面中缺少一些东西,就好像准备事件的某些部分丢失了。正在调查...

编辑2

哈哈哈哈,在 document.ready 中,我点击了一些应该未被选中的复选框。当我“返回”到此页面时,它们被选中,因为我重新进行了click

抱歉,这完全是我的问题:(


你在哪个浏览器中看到这个问题?我记得只有Opera浏览器会出现前进/后退按钮的问题。 - Crescent Fresh
我在使用 Chrome。报告问题的用户正在使用 Firefox。 - Sirber
这是Firefox的一个功能,请参考此帖:https://dev59.com/KXE85IYBdhLWcg3wvGER - Kees van Dieren
4个回答

28

解决这个问题的快速方法是使用"onpageshow"代替。

window.onpageshow = function(event) {
    //do something
};

谢谢!其他提出的解决方案在Firefox和Chrome上都不能正常工作,但这个可以。 - Jorge Suárez de Lis
谢谢!我注意到在移动浏览器(Safari和Google Chrome)下的iOS中,$(document).ready()不会被history.back()触发(而在桌面浏览器上可以),我已经搜索了很长时间...但是使用window.onpageshow它可以在所有浏览器上工作。 - FredyWenger
警告:在Firefox 74上,pageshow事件不会在iframe元素上触发,但“load”事件会触发 =/ - hanshenrik
警告,历史记录后退是巫术!让我们团结起来,永远消除它的不稳定性,它唯一真正应该做的事情就是重新填充先前填写的表单。这就是全部,否则它应该正常加载 x) - jave.web

7
如果用户使用“返回”按钮进行导航,并且您需要完全重新加载页面,则可以设置页面的“NO-CACHE”策略。这样浏览器就被强制从服务器重新加载页面,即使使用“返回”按钮也是如此。

嗯...不错的答案。我没想到过。 - Dutchie432
我已经使用了以下代码:header("Cache-Control: private, no-cache, must-revalidate"); header("Pragma: no-cache"); - Sirber
我添加了<meta http-equiv="pragma" content="no-cache">,但是当我按“返回”时它并没有重新加载页面。 - Sirber
2
取决于您的浏览器 - 谷歌浏览器无法正确处理它。 - ajbeaven

4

1.) 将脚本放在页面底部。
2.) 在最后的脚本标签中执行插件等操作。
3.) 不要使用onDomReady实现,这是多余的。

人们习惯于使用onload或onDomReady,却忽视了将脚本放在页面底部几乎可以达到相同的效果,而无需轮询并查看html是否可用。

此外,将脚本放在底部也是一个好的实践方法,因为这样做不会阻塞html/css的渲染。

不依赖onDomReady或onLoad实现可以解决很多问题。


1
-1,对于一个onload无法工作的浏览器,你的解决方案也不起作用。例如FireFox,它无论你是将脚本放在onload中还是页面底部,都不会运行该脚本。你有测试过吗? - Pacerier

1
非常有趣的问题。当页面获得焦点或类似情况时,您可能需要重新触发事件/函数。您还可能需要保持一个标志变量来跟踪是否需要“重新触发事件”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接