为了账号安全,请及时绑定邮箱和手机立即绑定

使用 iOS WKWebView 弹出窗口时从弹出窗口调用 opener 函数

使用 iOS WKWebView 弹出窗口时从弹出窗口调用 opener 函数

慕勒3428872 2023-03-18 17:25:22

我最近一直在更改UIWebView为WKWebView基于 iOS WebView 的应用程序。


WebView 的 javascript 中有一个window.open函数,弹出窗口调用 opener(parent) 的函数,如下所示


// In parent window's javascript

window.open('popup' .....)


function doIt(){

}



// In popup window's javascript

window.opener.doIt()

在 UIWebView 中,我使用了 JSContext,以便弹出窗口可以调用 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 上下文中链接两个 webview?在不更改遗留 javascript 代码的情况下,我应该怎么做才能调用 opener 的函数?


查看完整描述

1 回答

?
白猪掌柜的

TA贡献1663条经验 获得超9个赞

真是个错误!

当 popup webview 在中实例化时func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView?,我创建了一个 webview,添加为 subView 并返回 nil。这就是 is null on javascript 的原因window.opener


查看完整回答
反对 回复 3天前
  • 1 回答
  • 0 关注
  • 7 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信