UIWebView Javascript窗口到窗口通信

UIWebView Javascript窗口到窗口通信,第1张

概述我正在开发一个iOS应用程序,我正在尝试使用UIWebView来显示各种网站.最近我完成了将 Javascript注入UIWebView以捕获window.open,window.close和window.opener.focus实例的逻辑.简而言之,为此,我注入了JS,它覆盖了前面提到的JS函数,其中包括使用特定方案创建一个iframe,我可以在应用程序的webView中捕获:shouldSta 我正在开发一个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

总结

以上是内存溢出为你收集整理的UIWebView Javascript窗口到窗口通信全部内容,希望文章能够帮你解决UIWebView Javascript窗口到窗口通信所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1004722.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存