【问题标题】:Making AJAX calls from inside of an iframe with different domain从具有不同域的 iframe 内部进行 AJAX 调用
【发布时间】:2011-11-03 06:32:11
【问题描述】:

是否可以从具有不同域源的 iframe 内部进行 AJAX 调用?

我尝试过脚本注入,但它不起作用,因为 iframe 的源代码是安全的。 我在加州 DMV 网站 here 做了一个简单的摆弄。

我收到 DOM 异常 8 错误。是安全问题吗?

【问题讨论】:

    标签: javascript html dom iframe


    【解决方案1】:

    无法在具有不同域源的 iframe 中修改或进行 JS 调用。出于安全原因,这在所有浏览器中都受到限制。

    请参阅“Same Origin Policy”了解帧间安全性的工作原理。简而言之,出于安全原因,不同域上的帧之间允许的通信非常少。您不能在不同域的框架之间进行任何直接的 Javascript 调用。

    有一种方法可以进行跨域 ajax 调用,它涉及使用JSONP。基本上,您将一个脚本标签注入到您自己的框架中,并且该脚本标签指向网络上任何地方的服务器端点。由于脚本标签的 src 值不受同源策略的限制,因此您可以访问该服务器。但是,现在您需要有一种方法来恢复该结果。这是使用 JSONP 完成的,您在服务器请求中指定您希望返回的 javascript 调用的 javascript 函数。返回的 javascript 中可以包含 javascript 数据,然后将其传递给所需的函数。 JSONP 需要客户端代码和服务器代码之间的合作,因为普通的 ajax 调用可能不支持 JSONP 的额外部分。但是,通过双方的合作,您可以绕过支持 JSONP 的服务器端点的同源策略。

    HTML5 有一个新的消息传递系统,可以在不同域的协作框架之间安全地传递数据(而不是直接的 JS 调用)。请参阅 herehere 了解 HTML5 消息传递的工作原理。

    【讨论】:

      【解决方案2】:

      是的,这是一个安全问题,因为大多数浏览器都执行同源策略:http://en.wikipedia.org/wiki/Same_origin_policy

      您可以查看专门为解决此问题而设计的 JSONP http://niryariv.wordpress.com/2009/05/05/jsonp-quickly/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-06-22
        • 2012-10-13
        • 1970-01-01
        • 2020-11-25
        • 1970-01-01
        • 2011-08-21
        • 1970-01-01
        相关资源
        最近更新 更多