【问题标题】:Can I inject / run Javascript in different-domain frames in UIWebView?我可以在 UIWebView 的不同域框架中注入/运行 Javascript 吗?
【发布时间】:2011-07-14 16:26:37
【问题描述】:

所以我可以使用-stringByEvaluatingJavaScriptFromString: 在加载到 UIWebView 的页面中运行 Javascript,但这只会在浏览器的顶部框架中运行 Javascript。我可以通过window.frames 从顶部框架导航到其他同域框架,但这不适用于不同域框架。有什么方法可以访问 UIWebView 中的不同域框架?

我尝试检查 UIWebViewDelegate 的 -webViewDidFinishLoad: 回调的参数是否具有不同的 Javascript 上下文,但看起来即使为已完成加载 Javascript 上下文的框架调用回调仍然是顶部框架的回调.

感谢您的帮助。

【问题讨论】:

    标签: javascript ios uiwebview


    【解决方案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/…:)
    猜你喜欢
    • 1970-01-01
    • 2011-02-19
    • 1970-01-01
    • 2010-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多