我使用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;
}
答案 0 :(得分:0)
首先在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")