小编Sly*_*nal的帖子

在iframe中调用element.focus()将父页面滚动到Safari iOS10中的随机位置

在将焦点设置在iframe内的元素上时,iOS 10.1.1上的Safari似乎有一个错误.

当我们调用element.focus()iframe中的元素时,Safari将立即向下滚动父页面并将焦点元素移出屏幕(而不是将焦点元素滚动到视图中).

但是,只有当元素位于比设备屏幕高度更高的iframe时才会发生(更短的iframe可以).

因此,如果有两个元素,一个在iframe的顶部,另一个在页面的下方,第一个将精确聚焦,但第二个将在我们设置焦点时跳出屏幕.

对我来说,Safari似乎试图将元素滚动到视图中,但数学是错误的,它们最终滚动到页面下方的随机位置.在iOS9中一切正常,所以我认为这是iOS10中的一个新bug.

有一些方法可以阻止父页面滚动或其他一些方法来避免这个错误?

我已经整理了一个单页的要点,在iOS 10设备或模拟器上复制了这个问题.

这是您可以在手机上实际使用的URL:goo.gl/QYi7OE

这是一个plunker,所以你可以检查桌面行为:https://embed.plnkr.co/d61KtGlzbVtVYdZ4AMqb/

以及那个plunker的主要版本:https://gist.github.com/Coridyn/86b0c335a3e5bf72e88589953566b358

这是一个可以运行的gist版本(这里的缩短的URL点):https: //rawgit.com/Coridyn/86b0c335a3e5bf72e88589953566b358/raw/62a792bfec69b2c8fb02b3e99ff712abda8efecf/ios-iframe-bug.html

的index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta name="apple-mobile-web-app-capable" content="yes" />

    <script>
    document.addEventListener('DOMContentLoaded', function(){
        document.querySelector('#frame').srcdoc = document.querySelector('#frameContent').innerHTML;
    });
    </script>
</head>
<body>
    <iframe id="frame" frameborder="1"
        style="width: 100%; height: 1200px;"
        width="100%" height="1200">
    </iframe>

    <!--
    To keep this a one-page example, the content below will be inserted into the iframe using the …
Run Code Online (Sandbox Code Playgroud)

javascript iframe mobile-safari ios10

19
推荐指数
1
解决办法
4747
查看次数

标签 统计

iframe ×1

ios10 ×1

javascript ×1

mobile-safari ×1