我正在调试某个第三方精简的Javascript,它在某个地方触发了浏览器页面刷新。但是,我无法弄清楚是哪部分代码导致了刷新。有没有一种方法可以在Chrome中设置一个断点,在页面刷新之前会被命中,这样我就可以检查调用堆栈,看看是什么导致了它?
mm9b1k5b1#
试试这个:1.打开Chrome开发工具1.导航到“源”选项卡1.在右侧面板上,展开“事件侦听器断点”1.展开“加载”树1.检查beforeunload和unload选项看看是否有帮助;截图如下。
beforeunload
unload
编辑:或者,如果这不起作用,你可以使用Chrome搜索所有加载的脚本,寻找可能负责的代码。显然有a lot of ways to refresh the page with JavaScript,但它们大多有一些常见的字符串,如“navigator”,“location”,“reload”,“window”。最后,如果有一个链接指向您所在的同一个页面,那么可能是某些JS触发了对它的点击--不太可能,但值得探索,如果到目前为止还没有其他工作的话。(请原谅格式,因为我在移动的...)
**注意:**似乎偶尔,由于我还不完全理解的原因,这个解决方案实际上无法导致调试器暂停;在这种情况下,我发现索恩对这个问题回答对我很有用。
0md85ypi2#
在Firefox(不是Chrome,这很重要;UPD 2020:它现在也可以在Chrome中工作)开发人员工具,转到控制台,输入addEventListener('beforeunload',()=>{debugger}),然后执行代码。调试器在debugger语句处停止后,查看调用堆栈。您将看到触发事件的内容。Chrome没有它。至少,这对我有用。
addEventListener('beforeunload',()=>{debugger})
debugger
woobm2wo3#
在devtool的network窗格中,切换“Preserve log”,仔细检查initiator列。
zbdgwd5y4#
您不需要指定第三方库的功能。如果它是广告或类似的ui组件,只需将其放置在iframe中,并根据需要配置sandbox属性。https://developer.mozilla.org/en/docs/Web/HTML/Element/iframe(向下滚动到沙盒属性部分)如果它是由事件触发的,只需使用(仅在chrome开发工具中)getEveneListener()函数并遵循listener trail...(很难,但可能)示例:
iframe
sandbox
listener
listener属性将引导你找到将要调用的实际函数。你可以在混淆的代码中搜索它们,并添加调试器来了解它的用途。还有许多其他的场景-如果你可以指定更多的话。
7d7tgy0s5#
需要考虑的事项:
在我的例子中,它是一个 Package 内容的表单元素。
5条答案
按热度按时间mm9b1k5b1#
试试这个:
1.打开Chrome开发工具
1.导航到“源”选项卡
1.在右侧面板上,展开“事件侦听器断点”
1.展开“加载”树
1.检查
beforeunload
和unload
选项看看是否有帮助;截图如下。
编辑:或者,如果这不起作用,你可以使用Chrome搜索所有加载的脚本,寻找可能负责的代码。显然有a lot of ways to refresh the page with JavaScript,但它们大多有一些常见的字符串,如“navigator”,“location”,“reload”,“window”。
最后,如果有一个链接指向您所在的同一个页面,那么可能是某些JS触发了对它的点击--不太可能,但值得探索,如果到目前为止还没有其他工作的话。
(请原谅格式,因为我在移动的...)
**注意:**似乎偶尔,由于我还不完全理解的原因,这个解决方案实际上无法导致调试器暂停;在这种情况下,我发现索恩对这个问题回答对我很有用。
0md85ypi2#
在Firefox(不是Chrome,这很重要;UPD 2020:它现在也可以在Chrome中工作)开发人员工具,转到控制台,输入
addEventListener('beforeunload',()=>{debugger})
,然后执行代码。调试器在debugger
语句处停止后,查看调用堆栈。您将看到触发事件的内容。Chrome没有它。至少,这对我有用。
woobm2wo3#
在devtool的network窗格中,切换“Preserve log”,仔细检查initiator列。
zbdgwd5y4#
您不需要指定第三方库的功能。如果它是广告或类似的ui组件,只需将其放置在
iframe
中,并根据需要配置sandbox
属性。https://developer.mozilla.org/en/docs/Web/HTML/Element/iframe(向下滚动到沙盒属性部分)如果它是由事件触发的,只需使用(仅在chrome开发工具中)getEveneListener()函数并遵循
listener
trail...(很难,但可能)示例:listener属性将引导你找到将要调用的实际函数。你可以在混淆的代码中搜索它们,并添加调试器来了解它的用途。
还有许多其他的场景-如果你可以指定更多的话。
7d7tgy0s5#
需要考虑的事项:
在我的例子中,它是一个 Package 内容的表单元素。