WKWebView显示白色屏幕,具有本机<-> webview通讯

时间:2018-12-29 17:45:53

标签: ios swift webview uiview wkwebview

这是ViewController类中的功能和道具, webViewContainer只是一个视图。该页面的确呈现,因为它打印WEBVIEW MSG WORKING到控制台,但是它没有出现在View所在的位置,或者显示在白色的位置。删除本机Webview通信并从WebView对该变量进行直接引用可以按预期工作,但是我需要保留消息传递功能。

@IBOutlet weak var webViewContainer: UIView!
var webView: WKWebView!

override func viewDidLoad() {
    super.viewDidLoad()

    let contentController = WKUserContentController()
    contentController.add(self, name: "callback")

    let config = WKWebViewConfiguration()
    config.userContentController = contentController
    print(webViewContainer.frame);

    webView = WKWebView(frame: webViewContainer.frame, configuration: config);

    webView.loadHTMLString("<html><body><script>try {webkit.messageHandlers.callback.postMessage('WEBVIEW MSG WORKING');} catch(err) {console.log('Can not reach native code');}</script><h1>WEBVIEW SHOWS</h1></body></html>", baseURL: URL(string: "http://localhost"));
}

func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
    guard let response = message.body as? String else { return }
    print(response)
}

1 个答案:

答案 0 :(得分:3)

您错过了电话

self.webViewContainer.addSubview(webView)

将其添加到viewDidLoad方法的末尾应该可以解决您的问题。