您将如何阻止页面自动刷新?
Posted
技术标签:
【中文标题】您将如何阻止页面自动刷新?【英文标题】:How would you stop a page from refreshing automatically? 【发布时间】:2017-09-15 05:00:37 【问题描述】:当我尝试检查有趣页面的来源时遇到问题,该页面每 3-5 秒自动刷新一次(可能是由于某些 js 脚本),这会重置我的 Inspect Element 检查器窗口每次刷新页面。
除了打开 NoScript 来阻止页面自动刷新之外,还有其他方法可以阻止该页面刷新或检查器窗口自行重置吗?
【问题讨论】:
this 有帮助吗?不确定您是否真的可以通过这种方式阻止软件触发的刷新。我已经尝试修补location.reload
,但我想如果它存储在闭包中,那将无法正常工作。
你使用调试器了吗?然后开始调试你的代码。
您可以尝试将网页文件保存在本地,然后离线寻找有问题的 js,绕过它,然后检查。有点粗糙,但可能有用吗?
@BartekBanachewicz ,我稍微编辑了问题以指定我使用 Firefox。谢谢你的意见!
@fruitjs,我应该在控制台中输入debugger;
吗?
【参考方案1】:
通常我只是打开 DevTools,必要时切换到相应的面板,然后点击暂停。
打开 DevTools:通过菜单,或按 F12、Ctrl+Shift+I 或 Cmd+Shift+I,具体取决于浏览器和操作系统。
切换面板:从 DevTools 顶部的选项卡中选择面板。它将被称为“Debugger”(Firefox、IE)或“Sources”(Chrome)或类似名称。
暂停:在 Debugger/Sources 面板中,单击暂停按钮(通常看起来像电视遥控器上的暂停按钮,||)或按等效键盘。键盘等效项是
Firefox 和 Chrome:F8 IE:Ctrl+Shift+B【讨论】:
太棒了。简单的。简单。在 Chrome、Firefox、IE11 中为我工作。Event Listener Breakpoints
下有一个Load
复选框,它将在加载事件时暂停。效果很好,所以我不必尝试恰到好处地点击暂停。【参考方案2】:
(2020-03-30 更新)
在 Firefox 74 中,此选项位于选项 -> 隐私和安全 -> 权限中
(原回复)
Firefox有阻止原生刷新的选项,该选项在高级->常规->当网站尝试重定向或重新加载页面时警告我
【讨论】:
有趣的设置。不记得我在 Firefox 中有那个选项。谢谢你的回答! @T.J.Crowder,能否请您在删除之前发布您编写的代码?我没有机会保存它:,( @Clone:真的只是debugger;
,但如果你想要长版,那就是pastebin.com/yrZhAHd2。不过,您不应该需要它; Louhike's approach 更简单,效果也很好(这就是我删除答案的原因)。
@T.J.Crowder 谢谢!【参考方案3】:
这个问题最流行的解决方案是捕获beforeunload
事件。浏览器将要求用户确认离开页面。代码最简单的形式如下所示:
window.onbeforeunload = function() return true
您可以在控制台中输入此代码。或者,您可以简单地将以下 URL 粘贴到浏览器地址栏中(不需要控制台)。您甚至可以为它添加书签。
javascript:window.onbeforeunload = function() return true
请注意,当您将 javascript:
部分粘贴到地址栏中时,现代浏览器可能会删除它;确保你输入回来。
要确定 Firefox 中重定向的原因,请尝试以下操作:
打开 Web 开发人员工具 (CTRL + SHIFT + I),打开“工具箱选项”并选中“启用持久日志”选项。这使得日志在页面加载时持续存在(否则日志将被清除)。
现在切换到“网络监视器”选项卡。
打开 URL 并让它刷新。
在“网络监视器”>“原因”列中,您会发现页面重新加载的原因。
原因列非常模糊(Chrome 做得好多 更好)。但是,如果 JavaScript 用于触发页面(重新)加载,那么它至少会显示该脚本的文件名和行号。
【讨论】:
onbeforeunload
技巧仅在页面刷新不在页面内循环上时才有效。例如,它会停止这个:setTimeout(function() location.reload(); , 1000);
而不是这个:setInterval(function() location.reload(); , 1000);
在第二种情况下,它只会一遍又一遍地要求您取消。 :-)(不过是个好主意。)【参考方案4】:
当页面仍在加载时,您可以按 Esc 键。当页面仍然是白色时,按下它。当您此时停止加载页面时,这通常会停止所有自动加载的 javascript。任何在动作上运行的脚本通常都不会受到影响。每个页面都不一样,尝试不同的时间。
当我使用一个名为 NovelUpdates 的网站时,有 javascript 可以隐藏某些元素,当我在页面加载时按 Esc 时,页面加载后将隐藏的所有元素都是可见的。然后,当我单击一个可以执行运行没有问题的 javascript 的按钮时。我相信 NoScript 不会解决你的问题。
另一个例子是那些在 10 秒后弹出令人讨厌的框的网站,显示您不是会员,如果不登录就无法查看该网站的任何内容,例如某些新闻文章网站。
【讨论】:
【参考方案5】:你可以做的是使用命令exit(),这相当于在php中死掉并且只是停止脚本。 如果您不知道是什么原因造成的,又不想寻找“坏男孩”,那么您不妨将整个脚本停在页面的最底部。
【讨论】:
以上是关于您将如何阻止页面自动刷新?的主要内容,如果未能解决你的问题,请参考以下文章