利用在 iframe 改变后,window.name 仍然会保留,就可以获取到不同域中的数据。
思路:
- a 和 b 是同域的 http://localhost:3000
- c 是独立的 http://localhost:4000
- a 获取 c 的数据,a 先引用 c,c 把值放到 window.name
- 然后立即把 a 引用的地址改到 b
- 在 b 中就会保留这个 window.name
代码
<iframe src="http://localhost:4000/c.html"frameborder="0"onload="load()"id="iframe"></iframe><script>let first = true;function load() {if (first) {let iframe = document.getElementById('iframe');iframe.src = 'http://localhost:3000/b.html';first = false;} else {console.log(iframe.contentWindow.name);}}</script>
由于是在 load 中改变 src,那么需要进行判断,否则会进入死循环,因为改变 src 后又会进行加载。
window.name = 'aa';
在 c 中,只需要设置 window.name 即可。
b 页面只是用于过渡,使得 a 页面可以直接通过 iframe.contentWindow.name 获取到数据
