首页 > 解决方案 > 如何在 wkwebview 中打开“window.open”

问题描述

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

但我无法window.open(...)在 javascript 中打开,我看不到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;
}

标签: iosobjective-cxcodecordovawkwebview

解决方案


首先在 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")

推荐阅读