UIWebView Javascript窗口到窗口通信

我正在开发一个iOS应用程序,我正在尝试使用UIWebView来显示各种网站.最近我完成了将 Javascript注入UIWebView以捕获window.open,window.close和window.opener.focus实例的逻辑.简而言之,为此,我注入了JS,它覆盖了前面提到的JS函数,其中包括使用特定方案创建一个iframe,我可以在应用程序的webView中捕获:shouldStartLoadWithRequest:navigationType方法.这一切现在都可以正常工作,包括window.open创建一个新的UIWebView而不是在同一个窗口中加载.

现在,问题已出现在Windows之间没有可行的JS通信解决方案.如果子窗口试图调用window.opener或window.parent,它总是返回一个空值,因此,它无法与原始Web视图进行通信.

为了了解哪些iOS浏览器能够有效地执行窗口到窗口的通信,我发现在iPhone上的9个浏览器中,只有Safari才能成功地有效地执行此通信.这让我相信UIWebView会阻止完整的JS窗口到窗口的通信.

有没有人能够让UIWebView与所有JS逻辑完全集成,即窗口到窗口的通信?或者有证据证明JS窗口到窗口的通信是不可能的?任何方向或建议表示赞赏.谢谢!

解决方法

找到可能的解决方

JavaScriptCore.framework添加到Linked Frameworks和webViewDidFinishLoad中:

jscontext *parentCtx = [self.parentWebView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
jscontext *childCtx = [self.childWebView  valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
childCtx[@"window"][@"opener"] = parentCtx[@"window"];

现在当你从childWebView调用window.opener.test()时,它将在parentWebView中激活测试函数

我不确定私有API.仅适用于iOS 7

相关文章

在有效期内的苹果开发者账号(类型为个人或者公司账号)。还...
Appuploader官网--IOS ipa上传发布工具,证书制作工具跨平台...
苹果在9月13号凌晨(北京时间)发布 iOS 16,该系统的设备可...
计算机图形学--OpenGL递归实现光线追踪
Xcode 14打出来的包在低版本系统运行时会崩溃,报错信息是Li...