【问题标题】:How to open 'window.open' in wkwebview如何在 wkwebview 中打开“window.open”
【发布时间】:2019-10-24 12:46:16
【问题描述】:

我使用 cordova 开发混合应用程序。 . . 我在WkWebvieUIDelegate.m写下面的代码 我可以打开一个标签(目标 _blank 与新窗口) 我可以看到NSLog这个代码

但我无法在 javascript 中打开 window.open(...),也看不到 NSLog

如何打开window.open

- (WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures
{
    webView.UIDelegate = self;
    webView.navigationDelegate = self;
    webView.configuration.preferences.javaScriptEnabled = YES;


  webView.configuration.preferences.javaScriptCanOpenWindowsAutomatically = YES;


    NSLog(@"1");
    NSURL* url = [navigationAction.request URL];
    UIApplication *app = [UIApplication sharedApplication];


    if ([app canOpenURL:url]) {
         NSLog(@"2");
        [app openURL:url];
    } else {
//        if (!navigationAction.targetFrame.isMainFrame) {
//
//            [webView loadRequest:navigationAction.request];
//        }
    }
    return nil;
}

【问题讨论】:

标签: ios objective-c xcode cordova wkwebview


【解决方案1】:

首先在 WKWebView 上创建一个扩展,定义一个 'runJavaScriptInMainFrame:' 方法。在扩展方法中,使用 NSInvocationOperation

NSInvocationOperation 类是 NSOperation 的具体子类 用于启动包含调用 指定对象上的选择器。这个类实现了一个非并发 操作。

调用未记录的 '_runJavaScriptInMainFrame:' 方法。

 extension WKWebView {
        func runJavaScriptInMainFrame(#scriptString: NSString) -> Void {
            let selector : Selector = "_runJavaScriptInMainFrame:"
            let invocation = NSInvocationOperation(target: self, selector: selector, object: scriptString)
            NSOperationQueue.mainQueue().addOperation(invocation)
        }
    }

现在叫这个:-

webview.runJavacriptInMainFrame:(scriptString: "Write Particular javascript code")

【讨论】:

  • 它可以在事件监听器中使用 javascript 吗?我的 javascript 在事件监听器中...... @Deviyani Swami
  • 需要实现WKScriptMessageHandler协议才能接收消息。
  • func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) { print("message: (message.body)") // 以及应该执行的任何其他操作。 }
  • 抱歉,不知道,这个是iOS版的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-11
  • 2018-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-23
相关资源
最近更新 更多