操作系统:iPad 12.0.1
我们有如下的html。
样本HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Tekion 3d model</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
</head>
<body class="noselect">
<button onclick="sendMessageToNative({a:1, b:2})" style="margin-top:40px;">Get message from web page</button>
<h4 id='statustext'>Header 2</h4>
<script>
function sendMessageToHTML(message) {
const s = JSON.stringify(message);
document.getElementById("statustext").innerHTML = s;
}
function sendMessageToNative(message){
try{
window.webkit.messageHandlers.receiver.postMessage(JSON.stringify(message));
}catch(err){
}
}
</script>
</body>
我们将在wkwebview中加载它,如下所示。
目标C文件
WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init];
WKUserContentController *ucc = [[WKUserContentController alloc] init];
[ucc addScriptMessageHandler:self name:@"receiver"];
[configuration setUserContentController:ucc];
[configuration.preferences setValue:@"TRUE" forKey:@"allowFileAccessFromFileURLs"];
self.webView = [[TWKWebView alloc] initWithFrame: CGRectMake(0, 0, 400, 100) configuration:configuration];
self.webView.scrollView.bounces = false;
NSString* path = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"html/sample.html"];
NSURL *nsurl = [NSURL fileURLWithPath:path];
NSURLRequest *nsr = [NSURLRequest requestWithURL:nsurl];
self.webView.navigationDelegate = self;
[self.webView loadRequest:nsr];
而且接收者也和上面一样在同一个文件中。
- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message{
if([message.name isEqualToString:@"receiver"]) {
NSLog(@"-----------messageFromHTML %@", message.body );
}
}
当在ios 11设备上运行上述代码时,它工作正常。我们能够向SAMPPL.HTML发送消息。
当在iOS 120.1上运行,页面呈现时,我们能够使用评估程序JavaScript(JavaScript)将消息传递给JavaScript(没有在上面的代码中显示)。但是,只要按一下按钮
'从网页获取消息'
应用程序崩溃。
我们不知道,为什么这只发生在ios12.0.1中。我们有遗漏吗?或者是wkwebview的错误。