繁体   English   中英

从具有不同域的iframe内部进行AJAX调用

[英]Making AJAX calls from inside of an iframe with different domain

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

我尝试了脚本注入,但是由于iframe的源是安全的,因此无法正常工作。 我在这里通过加利福尼亚DMV网站进行了简单的摆弄。

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

无法在具有其他域源的iframe中修改或进行JS调用。 出于安全原因,所有浏览器都对此进行了限制。

有关帧间安全性如何工作的描述,请参见“ 相同来源策略 ”。 简而言之,出于安全原因,在不同域上的帧之间几乎不允许通信。 您不能在不同域的框架之间进行任何直接的Javascript调用。

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

HTML5具有一个新的消息传递系统,该系统可以在不同域中的协作框架之间安全地通信数据(而非直接JS调用)。 有关HTML5消息传递工作方式的描述,请参见此处此处

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM