我可以在 UIWebView 的不同域框架中注入/运行 Javascript 吗?
Posted
技术标签:
【中文标题】我可以在 UIWebView 的不同域框架中注入/运行 Javascript 吗?【英文标题】:Can I inject / run Javascript in different-domain frames in UIWebView? 【发布时间】:2011-07-14 16:26:37 【问题描述】:所以我可以使用-stringByEvaluatingjavascriptFromString:
在加载到 UIWebView 的页面中运行 Javascript,但这只会在浏览器的顶部框架中运行 Javascript。我可以通过window.frames
从顶部框架导航到其他同域框架,但这不适用于不同域框架。有什么方法可以访问 UIWebView 中的不同域框架?
我尝试检查 UIWebViewDelegate 的 -webViewDidFinishLoad:
回调的参数是否具有不同的 Javascript 上下文,但看起来即使为已完成加载 Javascript 上下文的框架调用回调仍然是顶部框架的回调.
感谢您的帮助。
【问题讨论】:
【参考方案1】:出于安全原因,帧之间的 javascript 通信仅限于从同一主机(使用相同的协议和端口)加载其内容的帧。
因此,您尝试做的事情可能是不可能的。然而,html5 有一个名为postMessage 的功能,它允许跨不同主机进行通信。如果您可以控制要加载到 Web 视图中的 HTML 内容,您可能需要检查一下。
【讨论】:
我明白这一点,但我希望浏览器控件之外的应用程序可以通过某种方式访问控件内的框架。我正在使用浏览器,而不是网站..【参考方案2】:我意识到这是不久前的事了,但如果你可以控制子框架上 JS 的执行,postMessage 可能会做你想做的事。您可以使用它来有效地来回传递消息,并且因为您可以围绕其使用构建一个基本的信任模型,甚至可以安全地评估事物。
如果您从未找到解决此问题的方法,我会重新考虑 @joern 的建议!
【讨论】:
我无法控制页面中的 HTML,因此无法为 postMessage 添加侦听器。我希望有某种方法可以让我在UIWebView
的子框架中运行 Javascript,但听起来好像没有。
有一种方法可以在 UIWebView 中执行 JavaScript:stringByEvaluatingJavaScriptFromString(记录在这里:developer.apple.com/library/ios/documentation/UIKit/Reference/…:)以上是关于我可以在 UIWebView 的不同域框架中注入/运行 Javascript 吗?的主要内容,如果未能解决你的问题,请参考以下文章
使用 JavaScript 将 CSS 注入 UIWebView