基础引导
通过 HTMLIFrameElement.contentWindow 获取数据
contentWindow
- 属性返回当前 HTMLIFrameElement 的 Window 对象
你可以使用这个 Window 对象去访问这个 iframe 的文档和它内部的 DOM.
这个是可读属性, 但是它的属性像全局Window 一样是可以操作的window 共享性
window 是具有共享性的,在同一个窗口不同的页面是可以共享的 ,而且可以随意的读写。跨域实现方法
- 先让 iframe 中的页面程序保存 window.name
然后跳转与父级别窗口同源的另一个页面
每个浏览器窗口都有一个全局变量 window(包含 iframe 的 contentWindow)
每个 window 对象都有一个 name 属性
注意:一个窗口只有一个 name 属性
该窗口被关闭前,所有页面共享一个 name 属性并拥有读写权限
- 无论该窗口在被关闭前,载入什么页面,都不会改变 name 值
- 存储约为 2Mb 字符串
- 如果父级窗口地址源和 iframe 地址源不同,父级无法通过 iframe.contentWindow.name 获取值,但 iframe内部不受该规则限

index1.html
<body><script>var flag = false;var iframe = document.createElement('iframe');var getDatas = function(){if(flag){var data = iframe.contentWindow.name;}else{flag = true;setTimeout(function(){iframe.contentWindow.loaction ='index2.html'; // 执行完后 就刷新再从头执行了,此代码块执行两次},500)}}iframe.src = 'http://other-origin.com/index3.html';if(iframe.attachEvent){iframe.attachEvent('onload',getDatas);}else{iframe.onload = getDatas;}document.body.appendChild(iframe);</script></body>
index2.html
与 index1.html 同源
内容是一个空的 html
目的为子集不受影响所以可以获得 window.name
index3.html
与 index1.html 不同源,与获取数据目标同源
<body><script>$.ajax{'./data.json', function(){window.name = JSON.stringify(data);}}</script></body>
缺点
非常地绕,且要有与服务端同源的 html 才能实现。
