JavaScript window.scrollTo Alternative

时间:2016-02-21 17:03:37

标签: javascript

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

在我的一个方法中,我想使用window.scrollTo,但不幸的是网站所有者已经覆盖了此功能的本机功能(也是window.scroll)。

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

  1. 撰写我自己的myScrollTo实施
  2. 以某种方式检测本机函数是否被覆盖并调用本机函数。
  3. 如果您对此有任何想法,我将很高兴听到他们:)

    感谢。

2 个答案:

答案 0 :(得分:3)

您可以创建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)

答案 1 :(得分:0)

嗯,这不是完美的解决方案,但是我目前需要的是套房。

首先,我将检查本机功能是否被这段有用的代码覆盖:

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)));
}

来源:https://stackoverflow.com/a/7536972/3009194

然后我会尝试替代方案:window.scroll因为window.scroll() and window.scrollTo()

之间没有区别

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

是的,我知道,身体可能不是滚动元素。 不幸的是,document.scrollingElement仍然是草稿,在大多数浏览器中都不受支持。

所以最终的代码看起来像这样:

   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);