簡體   English   中英

如何在wkwebview中打開'window.open'

[英]How to open 'window.open' in wkwebview

我使用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;
}

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM