Как открыть 'window.open' в wkwebview - PullRequest
1 голос
/ 10 июня 2019

Я занимаюсь разработкой гибридного приложения с использованием 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;
}

1 Ответ

0 голосов
/ 10 июня 2019

Сначала создайте расширение в 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")
...