微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐