JavaScript window.scrollTo替代方案

JavaScript window.scrollTo替代方案,javascript,Javascript,我正在为一个特定的网站编写一个特定的javascript插件 在我的一个方法中,我想使用window.scrollTo,但不幸的是,站点所有者已经覆盖了该函数的本机功能window.scroll 所以我在考虑两种可能的解决方案: 编写我自己的myScrollTo实现 以某种方式检测本机函数是否被重写并调用本机函数。 如果你对此有任何想法,我将非常高兴听到: 谢谢。您可以创建一个iframe并使用其窗口实例来获取scrollTo的本机实现。下面的代码应该可以工作 var iframe = docu

我正在为一个特定的网站编写一个特定的javascript插件

在我的一个方法中,我想使用window.scrollTo,但不幸的是,站点所有者已经覆盖了该函数的本机功能window.scroll

所以我在考虑两种可能的解决方案:

编写我自己的myScrollTo实现 以某种方式检测本机函数是否被重写并调用本机函数。 如果你对此有任何想法,我将非常高兴听到:


谢谢。

您可以创建一个iframe并使用其窗口实例来获取scrollTo的本机实现。下面的代码应该可以工作

var iframe = document.createElement('iframe');
iframe.style.display = 'none';
document.body.appendChild(iframe);
window.altScrollTo = iframe.contentWindow.scrollTo;
现在,您应该能够使用它,如下所示

aScrollTo.call(window, 0, 600)

这不是完美的解决方案,但符合我当前的需求

首先,我将检查本机函数是否被以下有用的代码覆盖:

function isFuncNative(f) {
       return !!f && (typeof f).toLowerCase() == 'function' 
       && (f === Function.prototype 
       || /^\s*function\s*(\b[a-z$_][a-z0-9$_]*\b)*\s*\((|([a-z$_][a-z0-9$_]*)(\s*,[a-z$_][a-z0-9$_]*)*)\)\s*{\s*\[native code\]\s*}\s*$/i.test(String(f)));
}
资料来源:

然后我将尝试其他选项:window.scroll,因为

最后,如果这个也被覆盖,我想我将使用document.body.scrollTop

是的,我知道,有可能主体不是滚动元素。 不幸的是,这仍然是一个草稿,在大多数浏览器中不受支持

最后的代码如下所示:

   function myScroll(left, top) {
       if (isFuncNative(window.scrollTo)) {
           window.scrollTo(left, top);
       } else if (isFuncNative(window.scroll)) {
           window.scroll(left, top);
       } else {
           document.body.scrollLeft = left;
           document.body.scrollTop = top;
       }
   }

   myScroll(0,150);

还有一个基本相同的window.scroll。它也被覆盖了吗?@Prinzorn也被覆盖了: