使用 iOS WKWebView 弹出窗口时从弹出窗口调用开启函数 window
calling opener function from popup while using iOS WKWebView popup window
我最近一直在将 iOS 基于 WebView 的应用程序的 UIWebView
更改为 WKWebView
。
在 WebView 的 javascript 和 popup window 中有一个 window.open
函数,如下所示调用 opener(parent) 的函数
// In parent window's javascript
window.open('popup' .....)
function doIt(){
}
// In popup window's javascript
window.opener.doIt()
在 UIWebView 中,我使用了 JSContext,以便弹出 window 可以调用 opener 的 javascript 函数。
// Legacy code for communication between 2 UIWebView windows
// Not works when using WKWebView
JSContext *parentCtx = [parentWebView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
JSContext *childCtx = [popupWebView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
childCtx[@"window"][@"opener"] = parentCtx[@"window"];
但是,似乎 JSContext
在使用 WKWebView 时不可用。在这种情况下,如何在 javascript 上下文中 link 两个 webview?
我应该怎么做才能在不更改遗留 javascript 代码的情况下调用 opener 的功能?
提前致谢。
大错特错!
当在 func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView?
中实例化弹出 webview 时,我创建了一个 webview,添加为 subView 并且 returned nil。这就是 window.opener
在 javascript 上为空的原因。
所以方法和解决方案与完全相同。
如果在 WKUIDelegate 中创建 webview 时 return 适当的 webview,则无需为 window.opener
通信设置 JSContext。
我最近一直在将 iOS 基于 WebView 的应用程序的 UIWebView
更改为 WKWebView
。
在 WebView 的 javascript 和 popup window 中有一个 window.open
函数,如下所示调用 opener(parent) 的函数
// In parent window's javascript
window.open('popup' .....)
function doIt(){
}
// In popup window's javascript
window.opener.doIt()
在 UIWebView 中,我使用了 JSContext,以便弹出 window 可以调用 opener 的 javascript 函数。
// Legacy code for communication between 2 UIWebView windows
// Not works when using WKWebView
JSContext *parentCtx = [parentWebView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
JSContext *childCtx = [popupWebView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
childCtx[@"window"][@"opener"] = parentCtx[@"window"];
但是,似乎 JSContext
在使用 WKWebView 时不可用。在这种情况下,如何在 javascript 上下文中 link 两个 webview?
我应该怎么做才能在不更改遗留 javascript 代码的情况下调用 opener 的功能?
提前致谢。
大错特错!
当在 func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView?
中实例化弹出 webview 时,我创建了一个 webview,添加为 subView 并且 returned nil。这就是 window.opener
在 javascript 上为空的原因。
所以方法和解决方案与
如果在 WKUIDelegate 中创建 webview 时 return 适当的 webview,则无需为 window.opener
通信设置 JSContext。