代码之家  ›  专栏  ›  技术社区  ›  Harish_N

iOS 12设备上WKWebView中的邮件崩溃

  •  0
  • Harish_N  · 技术社区  · 6 年前

    操作系统: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的错误。

    0 回复  |  直到 6 年前
    推荐文章