如何阻止网页自动刷新?

33

我在查看一个有趣页面源代码时遇到了问题,该页面每隔3-5秒自动刷新(可能是由于某些JS脚本),每次刷新都会重置我的检查元素检查器窗口。

除了启用NoScript来停止页面自动刷新外,还有其他方法可以停止该页面刷新或防止检查器窗口重置吗?


这个有帮助吗?不确定你是否可以通过这种方式来防止软件引起的刷新。我曾尝试过修改location.reload但如果它存储在闭包中,那么这种方法可能行不通。 - Bartek Banachewicz
3
你是否使用了"debugger;"命令并开始调试你的代码? - fruitjs
1
@BartekBanachewicz,我稍微编辑了一下问题,以明确我使用的是Firefox浏览器。感谢您的建议! - Clone
1
@fruitjs,我应该在控制台中键入“debugger;”吗? - Clone
这个链接或者链接中的答案可行吗?我不明白为什么要重新打开这个问题。我们真的不需要为世界上每个浏览器单独开一个线程。 - Salman A
显示剩余5条评论
5个回答

32

通常我只需要打开DevTools,必要时切换到适当的面板并点击暂停按钮。

打开DevTools:通过菜单或按下浏览器和操作系统相关的 F12Ctrl+Shift+ICmd+Shift+I 键。

切换面板:从DevTools顶部的选项卡中选择相应的面板。它可能被称为“Debugger”(Firefox,IE)或“Sources”(Chrome)或类似名称。

暂停:在Debugger/Sources面板中,点击暂停按钮(通常类似于电视遥控器上的暂停按钮, || ),或按下键盘上的等效键。键盘等效键分别为

  • Firefox和Chrome:F8
  • IE:Ctrl+Shift+B

3
出色。简单。易用。在Chrome、Firefox和IE11中对我有效。 - T.J. Crowder
在“事件监听器断点”下有一个“加载”复选框,它将在加载事件上暂停。这很好用,因为我不必尝试恰好按下暂停键的时间。 - Stack Underflow

21

(更新于2020年3月30日)

在Firefox 74中,此选项位于“选项”->“隐私与安全”->“权限”中。 输入图像描述

(原始回复)

Firefox有一个本地防止页面刷新的选项。该选项位于“高级” ->“常规” ->“当网站尝试重定向或重新加载页面时警告我”的位置。 输入图像描述


有趣的设置。我在Firefox中没有记得有这个选项。谢谢你的回答! - Clone
@T.J.Crowder,你能否请发一下你之前写的代码吗?我没来得及保存它 :,( - Clone
1
@Clone:实际上只是 debugger;,但如果你想要长版本,可以参考 https://pastebin.com/yrZhAHd2。不过你应该不需要那个,因为 Louhike 的方法 更简单,而且同样有效(这也是我删除答案的原因)。 - T.J. Crowder
@T.J.Crowder 谢谢! - Clone

8

解决这个问题最流行的方法是捕获beforeunload事件。浏览器会询问用户是否离开该页面。以下是最简单的代码形式:

window.onbeforeunload = function() { return true }

您可以在控制台中输入此代码。或者,您可以直接将以下URL粘贴到浏览器地址栏中(无需控制台)。您甚至可以将其加入书签。
javascript:window.onbeforeunload = function() { return true }

请注意,现代浏览器可能会在您将其粘贴到地址栏中时切掉javascript:部分,请确保您重新输入它。
要确定Firefox中重定向的原因,请尝试以下操作:
  • 打开Web开发工具(Ctrl+Shift+I),打开“工具箱选项”,并勾选“启用持久日志”选项。这使得日志在页面加载之间保持不变(否则日志会被清除)。

  • 现在切换到“网络监视器”选项卡。

  • 打开URL并让它刷新。

  • 在“网络监视器”>“原因”列中,您将找到页面重新加载的原因。

Firefox Web Developer Tools > Network Monitor

原因一栏非常模糊(Chrome做得更好)。然而,如果使用JavaScript触发页面(re)load,则至少会显示该脚本的文件名和行号。


仅当页面刷新不在页面内循环时,“onbeforeunload”技巧才能起作用。例如,它会停止这个:setTimeout(function() { location.reload(); }, 1000);但不会停止这个:setInterval(function() { location.reload(); }, 1000);在第二种情况下,它只会一遍又一遍地询问您是否要取消。 :-)(虽然是个好主意。) - T.J. Crowder
谢谢,我不得不在谷歌上搜索一段时间,直到我找到了这个好的解决方案。 - Bri4n

1
当页面仍在加载时,您可以按Esc键。在页面仍然是白色的情况下,按下它。在此时停止页面加载时,通常会停止所有自动加载的javascript。任何在操作上运行的脚本通常不受影响。每个页面都不同,请尝试不同的时间。
当我使用一个名为NovelUpdates的网站时,有一些JavaScript可以使某些元素隐藏,当我在页面加载时按Esc键时,所有在页面加载后将被隐藏的元素都可见。然后,当我单击一个将执行JavaScript且没有任何问题的按钮时。我认为NoScript无法解决您的问题。
另一个例子是那些令人讨厌的框,在10秒后弹出,说您不是会员,不能查看更多此网站的内容,比如某些新闻文章网站。

0
你可以使用命令exit(),它相当于php中的die,并且可以简单地停止脚本。如果你不知道是什么原因导致了这个问题,也不想寻找“坏蛋”,那么你最好在页面底部停止整个脚本。

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