您将如何阻止页面自动刷新?

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:通过菜单,或按 F12Ctrl+Shift+ICmd+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中死掉并且只是停止脚本。 如果您不知道是什么原因造成的,又不想寻找“坏男孩”,那么您不妨将整个脚本停在页面的最底部。

【讨论】:

以上是关于您将如何阻止页面自动刷新?的主要内容,如果未能解决你的问题,请参考以下文章

如何阻止bootstrapvalidatory验证通过自动提交表单

如何使用django实现某页面的自动刷新

如何让框架网页有自动刷新功能?

web发布新版本,前端页面如何自动刷新

如何让访问网站时页面自动刷新两次?

javascript页面自动刷新,然后调用函数