Os: ipad 12.0.1
У нас есть HTML, как показано ниже.
sample.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 file.m
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 он работает нормально.Мы можем отправлять сообщения в файл sample.html и из него.
При запуске на ios 12.0.1, страница обрабатывается, мы можем передать сообщение в javascript с помощьюvaluJavascript (не показано в коде выше).Но, по нажатию кнопки 'Получить сообщение с веб-страницы' * приложение 1025 * вылетает.
Мы понятия не имеем, почему это происходит только в ios12.0.1.Мы что-то упустили?или это ошибка в wkwebview.