在Chrome Devtools中,您可以在更改DOM元素的属性或元素的子树修改时中断javascript。
我正在处理一些遗留代码,这些代码在某些情况下会有一些javascript滚动到页面顶部,我想找到执行此操作的JS。
在Devtools中有没有办法让滚动事件中断?
它可能是jQuery或Prototype.js或事件库JS,它已经搜索了.scrollTop或.animate的代码库,我发现了很多这些,但没有一个是导致我的问题。
答案 0 :(得分:5)
我对实际破坏没有其他想法。
但我怀疑它不会滚动导致问题,但是#'#'在html。
<a href="#" onclick="return false;">x</a>
是一种非常常见的模式。当你忘记(或者某些东西阻止)&#34;返回false&#34;时,#(空锚)将被导航到,这会导致滚动到顶部。
点击后检查网址末尾是否有#。
答案 1 :(得分:2)
当滚动位置以编程方式更改时,您可以使用控制台注入此行JS来触发调试器。
window.__defineSetter__("pageYOffset", function(){
debugger;
});
然后,查看调用堆栈以查看触发它的内容。
如果您不想激活调试器,可以使用以下代码打印堆栈跟踪:
window.__defineSetter__("pageYOffset", function(){
console.log(new Error().stack);
});
另一种选择是用您自己的方法替换Windows scroll
,scrollTo
和scrollBy
方法。
window.__defineGetter__('scroll', function(){
console.log('window.scroll getter :' + new Error().stack);
return function(x,y){
debugger; //or print stack trace
oldScroll(x,y);
}
});
重复scrollTo
和scrollBy
。