WKWebView 显示白屏,使用原生 <-> webview 通信
WKWebView showing white screen, with native<->webview communication
这是我的 ViewController Class 里面的函数和道具,
webViewContainer 只是一个视图。该页面确实呈现,因为它打印 WEBVIEW MSG WORKING
到控制台,但它没有出现在视图所在的位置,或者它出现但只是白色。删除本机 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)
}
你错过了排队
self.webViewContainer.addSubview(webView)
将它添加到 viewDidLoad 方法的末尾应该可以解决您的问题。
这是我的 ViewController Class 里面的函数和道具,
webViewContainer 只是一个视图。该页面确实呈现,因为它打印 WEBVIEW MSG WORKING
到控制台,但它没有出现在视图所在的位置,或者它出现但只是白色。删除本机 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)
}
你错过了排队
self.webViewContainer.addSubview(webView)
将它添加到 viewDidLoad 方法的末尾应该可以解决您的问题。