是否可以找到导致页面滚动的函数
Is it possible to find the function that caused page scroll
我试图找出哪个函数导致页面在悬停元素时滚动,但到目前为止我一无所获。
元素没有附加特定的监听器,据我所知,它是通过 mouseover
监听器或类似的触发的,元素包含许多附加到它们的监听器。
此外,这不是浏览器功能,它是 javascript 特有的,因为当我取消大部分代码时它不会发生。
我已经尝试过 null
我知道的滚动方法是这样的:
[
'scroll',
'scrollTo',
'scrollBy',
'scrollByLines',
'scrollByPages',
'scrollX',
'scrollY',
'scrollMaxX',
'scrollMaxY',
'scrollHeight',
'scrollIntoView',
'scrollTop',
'scrollTopMax'
].forEach(function(a) {
window[a] = null;
document.documentElement[a] = null;
})
希望当神秘函数尝试调用滚动方法时会抛出错误,但它仍然可以正常滚动,没有任何问题。
我也试过监听滚动事件,但没有返回参数让我更接近负责的功能。
我试过在缩小的源代码中寻找它,但常见的 scroll
搜索 returns 266 个结果,我什至不确定它是否使用典型的滚动方法。
有什么方法可以找到使页面滚动的函数?
<div onmouseover="scrollWin()">Hover over me and it scrolls down the page</div>
<p>You will need stuff here to see the scroll work</p>
<script>
function scrollWin() {
window.scrollBy(0, 100);
}
</script>
经过 3 天的努力寻找这个神秘的函数,我在第二次发布相同的问题后找到了它,导致页面滚动的函数最终成为 .focus()
函数。很久以前就记得了,但是自从知道之后就没用过,而且和其他的滚动函数也不太容易联系起来,所以一直很纠结。
感谢所有参与其中的人。希望将来其他人会发现这很有用。
我们最近在我们的应用程序中遇到了非常相似的意外滚动,最终将罪魁祸首缩小到 Modernizr 的 CSS 连字符功能检测。
错误报告在这里:
https://github.com/Modernizr/Modernizr/issues/2172
对于您的情况,滚动是由对 .focus() 的调用引起的,因此它避开了我们最初搜索不需要的 "scroll" 代码调用。
2020 年,转到 Chrome 的开发工具,Sources
选项卡,然后在右侧窗格中滚动到最底部找到 Event Listener Breakpoints
。
您会在 Control
组中找到 scroll
。每当触发滚动事件时,单击复选框将停止执行(这是一个断点),并且您将能够在 Call Stack
组下的同一窗格(右侧)中跟踪执行此操作的代码(它可能是调试器启动后右窗格中的第一组。
在我的例子中是一个带有自动对焦输入的组件 属性
<input type="text" autoFocus={true} />
我删除了 属性
<input type="text" />
我试图找出哪个函数导致页面在悬停元素时滚动,但到目前为止我一无所获。
元素没有附加特定的监听器,据我所知,它是通过 mouseover
监听器或类似的触发的,元素包含许多附加到它们的监听器。
此外,这不是浏览器功能,它是 javascript 特有的,因为当我取消大部分代码时它不会发生。
我已经尝试过 null
我知道的滚动方法是这样的:
[
'scroll',
'scrollTo',
'scrollBy',
'scrollByLines',
'scrollByPages',
'scrollX',
'scrollY',
'scrollMaxX',
'scrollMaxY',
'scrollHeight',
'scrollIntoView',
'scrollTop',
'scrollTopMax'
].forEach(function(a) {
window[a] = null;
document.documentElement[a] = null;
})
希望当神秘函数尝试调用滚动方法时会抛出错误,但它仍然可以正常滚动,没有任何问题。
我也试过监听滚动事件,但没有返回参数让我更接近负责的功能。
我试过在缩小的源代码中寻找它,但常见的 scroll
搜索 returns 266 个结果,我什至不确定它是否使用典型的滚动方法。
有什么方法可以找到使页面滚动的函数?
<div onmouseover="scrollWin()">Hover over me and it scrolls down the page</div>
<p>You will need stuff here to see the scroll work</p>
<script>
function scrollWin() {
window.scrollBy(0, 100);
}
</script>
经过 3 天的努力寻找这个神秘的函数,我在第二次发布相同的问题后找到了它,导致页面滚动的函数最终成为 .focus()
函数。很久以前就记得了,但是自从知道之后就没用过,而且和其他的滚动函数也不太容易联系起来,所以一直很纠结。
感谢所有参与其中的人。希望将来其他人会发现这很有用。
我们最近在我们的应用程序中遇到了非常相似的意外滚动,最终将罪魁祸首缩小到 Modernizr 的 CSS 连字符功能检测。
错误报告在这里: https://github.com/Modernizr/Modernizr/issues/2172
对于您的情况,滚动是由对 .focus() 的调用引起的,因此它避开了我们最初搜索不需要的 "scroll" 代码调用。
2020 年,转到 Chrome 的开发工具,Sources
选项卡,然后在右侧窗格中滚动到最底部找到 Event Listener Breakpoints
。
您会在 Control
组中找到 scroll
。每当触发滚动事件时,单击复选框将停止执行(这是一个断点),并且您将能够在 Call Stack
组下的同一窗格(右侧)中跟踪执行此操作的代码(它可能是调试器启动后右窗格中的第一组。
在我的例子中是一个带有自动对焦输入的组件 属性
<input type="text" autoFocus={true} />
我删除了 属性
<input type="text" />