WKWebview和iOS交互篇

WKWebview和iOS交互篇

##iOS調用js
在UIWebview的時候使用JSContext來進行js通信,在WKWebview的時候,沒有JSContext了,但是Apple提供了新的方法evaluateScript,使用起來更便捷。

    [self.webview evaluateJavaScript:@"document.title" completionHandler:^(id _Nullable title, NSError * _Nullable error) {
        NSLog(@"title: %@", title);
    }];
    
    NSString *jsData = @"傳遞給h5的數據";
    NSString *jsStr = [NSString stringWithFormat:@"setJSData('%@')", jsData];
    [self.webview evaluateJavaScript:jsStr completionHandler:^(id _Nullable info, NSError * _Nullable error) {
        //js設置成功
    }];
  • 通過evaluateScript的方式,可以直接使用js如:document.title來獲取html的title。
  • 使用自定義的方法setJSData來處理。

上述通過setJSData的方式需要js端進行接收

var js_data;
window.setJSData= function(obj){
    js_data = obj;
};

##js調用iOS
同樣在UIWebview的時候使用JSContext來進行js通信,在WKWebview的時候,沒有JSContext了,但是Apple提供了新的方法WKScriptMessageHandler。

js代碼:

var message = {
                'method' : 'updateData',
                'params' : 'dataStr',
                };
window.webkit.messageHandlers.AWCall.postMessage(message);
///設置message.name
_userContent = [[WKUserContentController alloc] init];
[_userContent addScriptMessageHandler:self name:@"AWCall"];

//實現代理
- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message {
    NSLog(@"JS 調用了 %@ 方法,傳回參數 %@", message.name,message.body);
    NSLog(@"方法名:%@", message.name);
    NSLog(@"參數:%@", message.body);
    if ([message.name isEqualToString:@"AWCall"]) {
        
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章