让scrollTop从iframe中的iframe以IE Quirks模式工作

时间:2013-09-03 16:28:20

标签: javascript jquery

我在提交表单时试图强制我的页面滚动回到顶部时遇到了相当令人沮丧的时间。

我正在试用的代码很简单:

$('body').prepend('<a href="#" id="testing">Click here</a>');
$('body').on("click", "#testing", function() {
    window.top.$('body, html').animate({ scrollTop: 0 }, 0);
});

这可以按预期在FireFox上运行 - 但不适用于Internet Explorer。

值得注意的是,我正在使用UWA小部件格式,而我的代码基本上嵌入在两个iframe 中。 HTML模板和iframe包含此窗口小部件的iframe。 我无法控制这些框架,也无法为您提供完整的代码,因为它实际上是成千上万行可怕的HTML和JavaScript。

以下是我汇总的一些事实,看看是否有人能发现问题,因为我真的不知道从哪里开始寻找:

  • 在FireFox中,此代码可以正常工作 - 单击链接会立即将整个页面滚动到顶部
  • 如果我打开IE控制台,则页面默认标准为“Quirks Mode”。将其更改为“IE9标准”可解决问题,即单击链接可将整个页面滚动回顶部
  • window.top更改为window.parent均不适用于任何浏览器
  • window.top更改为window.parent.parent也适用于FF但不适用于IE
  • animate({ scrollTop: 0 }, 0);更改为scrollTop(0)在FF中有效,但在IE
  • 中无效

如果我在IE中运行以下警报,奇怪(对我而言),这是输出:

alert(typeof window.parent); // object
alert(typeof window.top); // object
alert(typeof window.parent.parent); // object
alert(typeof window.parent.$('html')); // object
alert(typeof window.parent.$('body')); // object
alert(window.parent.offset().top); // alert doesn't trigger, no further alerts run until this line is commented
alert(window.parent.parent.offset().top); // alert doesn't trigger, no further alerts run until this line is commented
alert(window.parent.$('html').offset().top); // 0
alert(window.parent.$('body').offset().top); // 0
alert(window.top.$('html').offset().top); // 0
alert(window.top.$('body').offset().top); // 0

简而言之,看起来window.top是可访问的,$('html')元素也可以访问...所以为什么我不能让我的页面滚动,除非我在浏览器中强制使用标准模式?

0 个答案:

没有答案