我正在尝试使用UIWebView
来显示各种网站的iOS应用程序。最近我完成了将Javascript注入到UIWebView
的逻辑,以捕获window.open
,window.close
和window.opener.focus
的实例。简而言之,我注入的JS覆盖了前面提到的JS函数,其中包括使用特定的方案创建iframe
,我可以在应用程序的webView:shouldStartLoadWithRequest:navigationType
方法中使用它。目前这一切都正常,包括window.open
创建新的UIWebView
,而不是在同一个窗口中加载。UIWebView Javascript窗口到窗口通信
现在,问题出现在没有可行的解决方案之间的JS通信窗口。如果子窗口试图呼叫window.opener
或window.parent
,它总是返回一个空值,因此它不能传回原始网络视图。
为了了解iOS浏览器能够有效地执行窗口间通信,我发现在iPhone上的9个浏览器中,只有Safari能够成功地有效地执行此通信。这导致我相信,有一些与UIWebView
,防止完整的JS窗口到窗口通信成为可能。
有没有人获得UIWebView与所有JS逻辑,即窗口到窗口通信完全集成的任何成功?或者有证据证明JS窗口间的通信是不可能的?任何方向或建议表示赞赏。谢谢!
同样的问题。运气好的话? – drogon
不幸的是,不幸的是。我所能做的只是简单的JS注入来覆盖窗口方法(如上所述)。在我的情况下,核心问题源自加载到UIWebview的网站中的Facebook身份验证,用户在验证后会被卡住,因为没有窗口到窗口的通信。最后,我不得不改变加载到WebView的网站中的逻辑(我恰好有能力控制它),直接使用FB重定向,而不是使用具有弹出窗口的普通身份验证流程。 –