javascript 在页面刷新之前的断点?

oyt4ldly  于 2023-03-28  发布在  Java
关注(0)|答案(5)|浏览(160)

我正在调试某个第三方精简的Javascript,它在某个地方触发了浏览器页面刷新。但是,我无法弄清楚是哪部分代码导致了刷新。
有没有一种方法可以在Chrome中设置一个断点,在页面刷新之前会被命中,这样我就可以检查调用堆栈,看看是什么导致了它?

mm9b1k5b

mm9b1k5b1#

试试这个:
1.打开Chrome开发工具
1.导航到“源”选项卡
1.在右侧面板上,展开“事件侦听器断点”
1.展开“加载”树
1.检查beforeunloadunload选项
看看是否有帮助;截图如下。

编辑:或者,如果这不起作用,你可以使用Chrome搜索所有加载的脚本,寻找可能负责的代码。显然有a lot of ways to refresh the page with JavaScript,但它们大多有一些常见的字符串,如“navigator”,“location”,“reload”,“window”。
最后,如果有一个链接指向您所在的同一个页面,那么可能是某些JS触发了对它的点击--不太可能,但值得探索,如果到目前为止还没有其他工作的话。
(请原谅格式,因为我在移动的...)

**注意:**似乎偶尔,由于我还不完全理解的原因,这个解决方案实际上无法导致调试器暂停;在这种情况下,我发现索恩对这个问题回答对我很有用。

0md85ypi

0md85ypi2#

Firefox(不是Chrome,这很重要;UPD 2020:它现在也可以在Chrome中工作)开发人员工具,转到控制台,输入addEventListener('beforeunload',()=>{debugger}),然后执行代码。调试器在debugger语句处停止后,查看调用堆栈。您将看到触发事件的内容。Chrome没有它。
至少,这对我有用。

woobm2wo

woobm2wo3#

在devtool的network窗格中,切换“Preserve log”,仔细检查initiator列。

zbdgwd5y

zbdgwd5y4#

您不需要指定第三方库的功能。如果它是广告或类似的ui组件,只需将其放置在iframe中,并根据需要配置sandbox属性。https://developer.mozilla.org/en/docs/Web/HTML/Element/iframe(向下滚动到沙盒属性部分)
如果它是由事件触发的,只需使用(仅在chrome开发工具中)getEveneListener()函数并遵循listener trail...(很难,但可能)示例:

listener属性将引导你找到将要调用的实际函数。你可以在混淆的代码中搜索它们,并添加调试器来了解它的用途。
还有许多其他的场景-如果你可以指定更多的话。

7d7tgy0s

7d7tgy0s5#

需要考虑的事项:

  • 是否有链接被按下
  • 是否有提交的表格?

在我的例子中,它是一个 Package 内容的表单元素。

相关问题