有三个页面:
a.com/app.html:应用页面。
a.com/proxy.html:代理文件,通常是一个没有任何内容的html文件,须要和应用页面在同一域下。
b.com/data.html:应用页面须要获取数据的页面,可称为数据页面。javascript
实现起来基本步骤以下:html
一、在应用页面(a.com/app.html)中建立一个iframe,把其src指向数据页面(b.com/data.html)。数据页面会把数据附加到这个iframe的window.name上,data.html代码以下:java
<script type="text/javascript"> window.name = 'I was there!'; // 这里是要传输的数据 </script>
二、在应用页面(a.com/app.html)中监听iframe的onload事件,在此事件中设置这个iframe的src指向本地域的代理文件(代理文件和应用页面在同一域下,因此能够相互通讯)。app.html部分代码以下:安全
<script type="text/javascript"> var state = 0, iframe = document.createElement('iframe'), loadfn = function() { if (state === 1) { var data = iframe.contentWindow.name; // 读取数据 alert(data); //弹出'I was there!' } else if (state === 0) { state = 1; iframe.contentWindow.location = "http://a.com/proxy.html"; // 设置的代理文件 } }; iframe.src = 'http://b.com/data.html'; if (iframe.attachEvent) { iframe.attachEvent('onload', loadfn); } else { iframe.onload = loadfn; } document.body.appendChild(iframe); </script>
三、获取数据之后销毁这个iframe,释放内存;这也保证了安全(不被其余域frame js访问):app
<script type="text/javascript"> iframe.contentWindow.document.write(''); iframe.contentWindow.close(); document.body.removeChild(iframe); </script>