scrollIntoView 导致 WKWebView 部分无响应

scrollIntoView causes WKWebView to be partially unresponsive

我的混合 iOS 应用程序在 iOS 11 测试版中遇到问题。它基本上是 WKWebView 中的网络应用程序 运行。 iOS 10 中不存在此问题,但已在 iOS 11 中引入。从 beta 8 开始,该问题仍然可重现。

当 webapp 多次调用 JavaScript 函数 scrollIntoView 时,部分 GUI 变得无响应。

以下简化的 HTML 文件演示了该问题:

<!DOCTYPE html>
<html><head>
    <meta charset="UTF-8">
        <meta id="viewportMeta" name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
            <title>Testcase</title>
            <script>

                let numClicks = 0;

                function runScrollIntoView() {
                    document.querySelector(".element-1").scrollIntoView();
                }

            function debugInfo() {
                return {
                    "window.screen.height": window.screen.height,
                    "window.screen.availHeight": window.screen.availHeight,
                    "document.body.scrollTop": document.body.scrollTop,
                    "document.body.scrollHeight": document.body.scrollHeight

                };
            }

            function clickHandler() {
                numClicks++;
                document.querySelector('.counter').innerText += numClicks + " clicks, " + JSON.stringify(debugInfo()) + "\n";
            }
            </script>

            <style>
                .instructions div {
                    border: 1px solid blue;
                    color: blue;
                }

            .counter {
                width: 300px;
                height: 300px;
                border: 1px solid black;
            }

            </style>

</head>
<body>

    <div class="instructions">
        <div onclick="clickHandler()">1. Click me to run click handler</div>
        <div onclick="runScrollIntoView()">2. Click me to run Element.scrollIntoView</div>
        <div onclick="clickHandler()">3. Click me to run click handler again</div>
        <div onclick="runScrollIntoView()">4. Click me to run Element.scrollIntoView again</div>
        <div onclick="clickHandler()">5. Click me to try run click handler again - nothing happens</div>
        <div>(Repeat 4-5 if necessary)</div>
    </div>

    <div class="counter">
        Number of clicks
    </div>

    <div class="element-1">Target to scrollIntoView</div>

</body>
</html>

...加载此 viewcontroller 时:

import UIKit
import WebKit
import Foundation
import SystemConfiguration

class ViewControllerNgf: UIViewController, WKNavigationDelegate, WKUIDelegate {

    var webView: WKWebView!

    override func loadView() {
        self.webView = WKWebView(frame: CGRect.zero)
        webView.navigationDelegate = self
        webView.uiDelegate = self
        view = webView
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        self.loadWebApp()
    }

    fileprivate func loadWebApp() {
        let htmlFile = Bundle.main.path(forResource: "htmlfile", ofType: "html")
        let html = try? String(contentsOfFile: htmlFile!, encoding: String.Encoding.utf8)

        DispatchQueue.main.async {
            self.webView!.loadHTMLString(html!, baseURL: nil)
        }
    }
}

我已将此作为错误报告给 Apple,但尚未收到回复,这让我觉得我在应用程序中做错了什么。但是Swift代码基本上是从Apple's documentation.

复制过来的

那么可能是什么问题?

问题似乎已在 iOS 11.2 中解决。