【问题标题】:How can I workaround window.scroll not working in iFrame on Android如何解决 window.scroll 在 Android 上的 iFrame 中不起作用的问题
【发布时间】:2013-07-31 01:18:10
【问题描述】:

window.scroll and window.scrollTo (its alias) don't seem to work on an <iframe> embedded in the Android 4.0.4 internet browserwindow.scrollBy 等任何其他功能(似乎)也没有。我该如何解决这个限制并强制 <iframe> 滚动到页面上的特定位置?

一些额外的信息:

  • 解决方案不需要很优雅,它可以是一个 hacky 解决方法。无论如何,这是测试代码。
  • 虽然代码不需要干净,但至少应该可以使其跨浏览器友好
  • 设备是运行 Android 4.0.4 本机浏览器的三星 Galaxy Note
  • Frame在同一个域中,所以可以在上面运行代码
  • 除了滚动之外,我希望页面尽可能保持原样
  • 在我的代码运行时,<iframe> 已完成加载

【问题讨论】:

  • element.scrollIntoView() 应该仍然有效。哦,它是 document.documentElement.scrollTop,document.body.scrollTop,而不是 window.scroll
  • 您是从 iframe 内部还是从父页面运行代码?
  • @dandavis .scrollIntoView() 似乎也不起作用。此外,window.scroll 与设置 scrollTop 的功能不同(浏览器之间略有不同)
  • @AndrewK 似乎都不起作用,但我将从父页面运行它。
  • 你想滚动什么元素? WebKit 核心不喜欢滚动<body>(有时)。

标签: javascript iframe android-internet


【解决方案1】:

它看起来像一个已知的错误 discussed herehere

以下内容对我有用:

  • 通过添加 {overflow:hidden} 关闭溢出样式
  • 调用scrollTo
  • 通过设置 {overflow:scroll} 开启样式

【讨论】:

  • 感谢您指出错误。我在任何地方都没有找到。我尝试了您的建议,但它似乎不适用于windowdocumentElementbody。 :( 如果你尝试的是窗口,你能分享你的代码吗?谢谢
  • 我在 div 上使用过。如果您尝试在 iFrame 中使用 div 并使用我提到的技巧滚动它会怎样。
  • 正如我在问题中所说,我想尽可能保持页面不变。不幸的是,将页面包装在<div> 中以滚动它,尤其是仅对于这个浏览器而言,这对我来说并不是一个真正可行的选择。这是页面的测试代码,所以只要有帮助,滚动确实应该是唯一的主要修改。
【解决方案2】:

使用focus()?

function scrollY(i) {
  var div = document.createElement("div");
  div.innerHTML = "<a style='position:absolute;left:0;top:" + i + "px' href='#'></a>";
  div = div.firstChild;
  document.body.appendChild(div);
  div.focus();
  div.parentNode.removeChild(div);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-29
    • 2020-04-08
    • 1970-01-01
    • 2019-09-02
    • 1970-01-01
    • 1970-01-01
    • 2018-05-12
    • 2014-01-28
    相关资源
    最近更新 更多