我正在调试一些第三方压缩的JavaScript代码,其中某处会触发浏览器页面刷新。但是,我无法确定哪部分代码导致了刷新。
有没有一种在Chrome中设置断点的方法,可以在页面刷新之前命中该断点,以便我检查调用堆栈并查看引起刷新的原因?
我正在调试一些第三方压缩的JavaScript代码,其中某处会触发浏览器页面刷新。但是,我无法确定哪部分代码导致了刷新。
有没有一种在Chrome中设置断点的方法,可以在页面刷新之前命中该断点,以便我检查调用堆栈并查看引起刷新的原因?
尝试以下方法:
beforeunload
和unload
选项看看是否有所帮助;如下图所示。
编辑:或者,如果这不起作用,您可以使用Chrome搜索所有已加载的脚本以查找可能负责的代码。显然有许多用JavaScript刷新页面的方法,但它们大多具有一些常见字符串,例如“navigator”,“location”,“reload”,“window”。
最后,如果有指向您正在访问的同一个页面的链接,则可能会触发JS单击它- 不太可能,但如果迄今为止没有其他方法奏效,这个值得探索......
(请原谅我的格式,因为我在移动设备上...)
注意:偶尔会出现这种情况,由于我还没有完全理解的原因,这种解决方法未能真正导致调试器暂停;在这种情况下,我发现thorn̈ 对这个问题的答案对我很有帮助。
addEventListener('beforeunload',()=>{debugger})
,然后执行你的代码。当调试器停止在debugger
语句时,查看调用堆栈。你将看到是什么触发了该事件。Chrome中没有类似功能。至少对我来说这个方法有效。
window.location.reload();
的脚本(无意间)引起的。奇怪的是,“DOM断点”功能竟然没有让调试器在beforeunload
或unload
上断下来。 - DaiaddEventListener('beforeunload',()=>{debugger});function foo(){window.location.reload()};foo()
调用堆栈正确显示。 - thorn0iframe
中,并将 sandbox
属性配置为您需要的即可。https://developer.mozilla.org/en/docs/Web/HTML/Element/iframe(向下滚动到沙盒属性部分)getEventListener()
函数并跟随 listener
路径...(困难,但可能)
例如:
listener
属性将引导您到将被调用的实际函数。然后,您可以在混淆代码中搜索它们并添加调试器以了解其目的。需要考虑的事项:
在我的情况下,是一个包含内容的表单元素。
refresh: 60;
。window.stop();
对于识别重定向源的问题,这些解决方案都没有起作用。
最后我发现问题是由于我点击的元素上的href="#"
引起的。该元素上还有一个onClick
事件,导致重定向到另一个页面。移除href="#"
解决了我的问题。
在使用AngularJS时,这不是一个问题,但在切换到React后,点击操作开始引发新的重定向。
onunload
监听器并在那里中断。 - Marvinonunload
和onbeforeunload
,但调用栈为空。 - Thomas Johnson