1. 程式人生 > >WKWebView OC和JS互動

WKWebView OC和JS互動

網頁很簡單,只有一個按鈕,點選按鈕會觸發一個方法,在事件的方法中通過呼叫 window.webkit.messageHandlers.NativeModel.postMessage({name: 'zhangyutang', age: 12}); 把訊息傳送給OC。OC中需要注入相同名稱的model:NativeModel。 網頁程式碼如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>html5page-oc</title>

    <script>
        function btn1Click() {
            window.webkit.messageHandlers.NativeModel.postMessage({name: 'zhangyutang', age: 12});
            alert("after call");
        }
    </script>

</head>
<body>

<input type="button" value="button c" onclick="btn1Click()">

</body>
</html>

程式碼實現,通過設定 WKWebViewConfigurationaddScriptMessageHandler:name 來設定JS事件的接收處理器,這邊設定為當前物件self,這裡的name需要設定為JS中的呼叫的Model:NativeModel

    WKWebViewConfiguration* config = [[WKWebViewConfiguration alloc] init];

    config.userContentController = [WKUserContentController new];
    [config.userContentController addScriptMessageHandler:self name:@"NativeModel"];
    
    
    _webView = [[WKWebView alloc] initWithFrame:self.view.bounds configuration:config];
    _webView.translatesAutoresizingMaskIntoConstraints = NO;
    _webView.backgroundColor = [UIColor whiteColor];
    _webView.UIDelegate = self;
    _webView.navigationDelegate = self;
    [self.view addSubview:_webView];

實現 WKScriptMessageHandler 的回撥方法 userContentController:didReceiveScriptMessage ,在這邊處理JS的方法呼叫。

#pragma mark - ......::::::: WKScriptMessageHandler :::::::......

- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message {
    
    id body = message.body;
    
    NSLog(@"=== %@", body);
}