OC端核心代碼
#pragma mark - 初始化wkwebview并配置
WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init];
// 設(shè)置偏好設(shè)置
config.preferences = [[WKPreferences alloc] init];
// 默認為0
config.preferences.minimumFontSize = 10;
// 默認認為YES
config.preferences.javaScriptEnabled = YES;
// 在iOS上默認為NO,表示不能自動通過窗口打開
config.preferences.javaScriptCanOpenWindowsAutomatically = NO;
// web內(nèi)容處理池救赐,由于沒有屬性可以設(shè)置帚呼,也沒有方法可以調(diào)用,不用手動創(chuàng)建
config.processPool = [[WKProcessPool alloc] init];
// 通過JS與webview內(nèi)容交互
config.userContentController = [[WKUserContentController alloc] init];
// 注入JS對象名稱AppModel稠歉,當(dāng)JS通過AppModel來調(diào)用時,
// 我們可以在WKScriptMessageHandler代理中接收到
[config.userContentController addScriptMessageHandler:self name:@"AppModel"];
// 穿件wkwebview并配置
self.webView = [[WKWebView alloc] initWithFrame:self.view.bounds configuration:config];
// 導(dǎo)航代理
self.webView.navigationDelegate = self;
// 與webview UI交互代理
self.webView.UIDelegate = self;
[self.view addSubview:self.webView];
#pragma mark - WKScriptMessageHandler
- (void)userContentController:(WKUserContentController *)userContentController
didReceiveScriptMessage:(WKScriptMessage *)message {
if ([message.name isEqualToString:@"AppModel"]) {
// 打印所傳過來的參數(shù)汇陆,只支持NSNumber, NSString, NSDate, NSArray,
// NSDictionary, and NSNull類型
NSLog(@"%@", message.body);
}
}
JS端核心代碼
<script type="text/javascript">
function callJsAlert() {
alert('Objective-C call js to show alert');
window.webkit.messageHandlers.AppModel.postMessage({body: 'call js alert in js'});
}
function callJsConfirm() {
if (confirm('confirm', 'Objective-C call js to show confirm')) {
document.getElementById('jsParamFuncSpan').innerHTML
= 'true';
} else {
document.getElementById('jsParamFuncSpan').innerHTML
= 'false';
}
// AppModel是我們所注入的對象
window.webkit.messageHandlers.AppModel.postMessage({body: 'call js confirm in js'});
}
function callJsInput() {
var response = prompt('Hello', 'Please input your name:');
document.getElementById('jsParamFuncSpan').innerHTML = response;
// AppModel是我們所注入的對象
window.webkit.messageHandlers.AppModel.postMessage({body: response});
}
</script>