ios - 如何在 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;
}
解决方案
首先在 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")
推荐阅读
- kubernetes - 导入带有子图表值的父模板
- python - 检查元素是否存在硒python
- mxnet - 如何提取 MXNet 中的典型行?
- c# - 将项目更新到实体核心 5 后,Microsoft.EntityFrameworkCore.Query.IParameterValues 出错
- linux - Linux can-bus 过度重传
- azure - 从配置文件中删除数组字符串项
- python - 如何在本地桌面上将数据框导出到 csv
- r - Add a column at the end of a data frame based on the column values in R
- java - 集成时出现异常:java.security.InvalidKeyException: Illegal key size
- javascript - 警告:列表中的每个孩子都应该有一个唯一的“键”道具,即使它有唯一的键 React