是否可以从具有不同域源的iframe内部执行AJAX调用?
我尝试过脚本注入,但它不起作用,因为iframe的源码是安全的。我对加州车管所的网站here做了一个简单的修改。
我收到了DOM exception 8错误。这是一个安全问题吗?
发布于 2011-08-25 08:28:59
不能在具有不同域源的iframe中修改或进行JS调用。出于安全原因,这在所有浏览器中都是受限制的。
有关帧间安全性如何工作的说明,请参阅"Same Origin Policy“。简而言之,出于安全原因,不同域上的帧之间几乎不允许通信。您不能在不同域上的帧之间进行任何直接Javascript调用。
有一种方法可以进行跨域ajax调用,它涉及到使用JSONP。基本上,您将一个脚本标记注入到您自己的框架中,该脚本标记指向web上任何位置的服务器端点。由于脚本标记的src值不受同源策略的限制,因此您可以到达该服务器。但是,现在您需要有一种方法来找回结果。这是使用JSONP完成的,您可以在服务器请求中指定希望返回的javascript调用的javascript函数。返回的javascript可以包含javascript数据,然后将这些数据传递给所需的函数。JSONP需要客户机代码和服务器代码之间的协作,因为正常的ajax调用可能不支持JSONP的额外部分。但是,通过双方的这种合作,您可以绕过支持JSONP的服务器端点的同源策略。
HTML5有一个新的消息传递系统,可以在不同域中的协作框架之间安全地通信数据(而不是直接的JS调用)。有关HTML5消息传递工作原理的说明,请参阅here和here。
发布于 2011-08-25 08:33:50
是的,这是一个安全问题,因为大多数浏览器执行的是同源策略:http://en.wikipedia.org/wiki/Same_origin_policy。
你可以看看JSONP http://niryariv.wordpress.com/2009/05/05/jsonp-quickly/,它是专门为解决这个问题而设计的。
https://stackoverflow.com/questions/7183828
复制相似问题