0

我在 iOS 11 测试版中的混合 iOS 应用程序有问题。它基本上是一个在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>

...加载此视图控制器时:

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 的文档中复制而来的。

那么可能是什么问题呢?

4

1 回答 1

0

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

于 2018-04-05T13:22:58.680 回答