Javascript 在浏览器中,在窗口滚动时中断

Javascript 在浏览器中,在窗口滚动时中断,javascript,jquery,scroll,prototype,google-chrome-devtools,Javascript,Jquery,Scroll,Prototype,Google Chrome Devtools,在ChromeDevTools中,您可以在更改DOM元素的属性或修改元素的子树时破坏javascript 我正在编写一些遗留代码,其中包含一些javascript,在某些情况下可以滚动到页面顶部,我想找到实现这一点的JS 在Devtools中,有没有办法在滚动事件时中断 可以是jQuery、Prototype.js或event base js,我在代码库中搜索了.scrollTop或.animate,我找到了很多,但没有一个是导致我问题的原因。当滚动位置以编程方式更改时,可以使用控制台插入这行j

在ChromeDevTools中,您可以在更改DOM元素的属性或修改元素的子树时破坏javascript

我正在编写一些遗留代码,其中包含一些javascript,在某些情况下可以滚动到页面顶部,我想找到实现这一点的JS

在Devtools中,有没有办法在滚动事件时中断


可以是jQuery、Prototype.js或event base js,我在代码库中搜索了.scrollTop或.animate,我找到了很多,但没有一个是导致我问题的原因。

当滚动位置以编程方式更改时,可以使用控制台插入这行js来触发调试器

window.__defineSetter__("pageYOffset", function(){
    debugger;
});
然后,查看调用堆栈以查看是什么触发了它

如果不想激活调试器,可以使用以下代码打印堆栈跟踪istead:

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

重复上述步骤,我对实际破坏没有比前面介绍的更清楚的想法

但我怀疑问题的根源不是滚动,而是html中的“#”

<a href="#" onclick="return false;">x</a>

这是一种非常常见的模式。当您忘记(或有什么东西阻止)返回false时,#(空锚点)将被导航到,这将导致滚动到顶部


点击后,检查url末尾是否有#

您搜索过window.scrollTo或window.scroll吗?是的,我搜索过它们,它们都显示出来了,但没有一个是针对我所在的页面的。您可能可以使用visual event Listener Breakpoints>Control>scroll来查看它。事件侦听器断点>控件>scroll是否执行了您想要的操作?或者,只有用户滚动页面时才会触发,而不是代码?@Barmar Yes和no。当以编程方式滚动窗口时,它会中断,但在事件侦听器中会中断,因此,您无法看到页面上实际滚动的代码位。我在控制台中转储了调试器行,当我单击滚动按钮时,什么也没有出现。@Josh您是否尝试替换
滚动
滚动
滚动
方法?尝试定义所有getter,但在控制台中看不到输出…使用Chrome(最新版本)。当我在控制台中输出函数def时(即键入fn名称并输入)我确实看到了新的fn def。调用
scroll
,例如,抛出两个错误:
window.scroll getter:Error at:3:42 at:1:1 window.scroll getter:Error at:5:44 at:1:1
@seebuistic,这些错误正是答案中的代码示例中包含的错误。从控制台运行时,您将得到这个通用错误r消息。但是如果从页面上的脚本以编程方式调用滚动条,您将获得适当的堆栈跟踪。太棒了!就在我认为ECMAScript 3已停止运行时;)感谢您的教育!这是因为这是一个坏习惯,即使每个人都这样做了。更好的
或更好的
,您不需要猜测是否需要阻止默认操作或返回某些内容来阻止执行锚定(因为
#
它是一个空锚定!)。是的,这是一种不好的做法。然而,我看到自己仍在这样做。当我有好的一天时,我使用
x
。您可以添加处理程序并根据自己的喜好对其进行样式设置,代码甚至更短。我不太喜欢javascript:。。。解决方案,因为它们增加了读取代码的复杂性。