iframe中的子页对父页的location可写,不可读。受同源策略限制。
Ajax严格遵守同源策略。但是,在W3C的新标准中,可以发送数据到另一个域。CORS—corss-orgin-resource-sharing
发送请求时,自动带上orgin头:http://www.foo.com
然后目标域判断这个Orgin值,如果是预期的就返回:
Access-Control-Allow-Origin: http://www.foo.com
如果 Access-Control-Allow-Origin之后是通配符*,则表示任意域都可以向目标跨
cookie
cookie可以设置domain为父级域,可以在不同子域实现cookie共享;cookie的path值为只允许该路径下的页面javascript才能读取cookie.。若/evil/路径想读取/admin/路径的cookie,可通过跨iframe进行dom操作。
原理是用脚本在/evil下创建一个指向/admin的iframe,通过获取iframe的document来获取cookie.
iframe跨域
一般分两种情况:
一、 是同主域下面,不同子域之间的跨域;
同主域,不同子域跨域,设置相同的document.domian就可以解决;
父页访问子页,可以document.getElementByIdx_x("myframe").contentWindow.document来访问iframe页面的内容;如果支持contentDocument也可以直接document.getElementByIdx_x("myframe").contentDocument访问子页面内容;
子页访问父页,可以parent.js全局属性
二、 是不同主域跨域;
前提,www.a.com下a.html,a.html内iframe调用了www.b.com下的b.html,b.html下iframe调用了www.a.com下的c.html
b.html是不无法直接访问a.html的对象,因为涉及到跨域,但可以访问parent,同样c.html的parent可以访问b.html。c.html和a.html同域,是可以访问a下的对象的。parent.parent.js对象!
看下面实例:
a.htmlhttp://s3/mw690/002n7U63zy77Us1T7Dcf2&690
b.html
http://s16/mw690/002n7U63zy77Us1UCJNff&690c.html
http://s11/mw690/002n7U63zy77Us1VRNw1a&690
加载中,请稍候......