window.name+iframe跨域

var proxy = function(url, callback) {
    var state = 0;
    var iframe = document.createElement('iframe');

    // 加载跨域页面
    iframe.src = url;

    // onload事件会触发2次,第1次加载跨域页,并留存数据于window.name
    iframe.onload = function() {
        if (state === 1) {
            // 第2次onload(同域proxy页)成功后,读取同域window.name中数据
            callback(iframe.contentWindow.name);
            destoryFrame();

        } else if (state === 0) {
            // 第1次onload(跨域页)成功后,切换到同域代理页面
            iframe.contentWindow.location = 'http://www.domain1.com/proxy.html';
            state = 1;
        }
    };

    document.body.appendChild(iframe);

    // 获取数据以后销毁这个iframe,释放内存;这也保证了安全(不被其他域frame js访问)
    function destoryFrame() {
        iframe.contentWindow.document.write('');
        iframe.contentWindow.close();
        document.body.removeChild(iframe);
    }
};

// 请求跨域b页面数据
proxy('http://www.domain2.com/b.html', function(data){
    alert(data);
});
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 大家对跨域这个字,应该特别敏感了把,大家在平常的工作种,去请求后台数据的时候,经常会遇到跨域的问题,这种跨域后台一...
    小李不小阅读 1,417评论 1 0
  • window.name跨域 在页面在浏览器端展示的时候,我们总能在控制台拿到一个全局变量window,该变量有一个...
    Bennt阅读 8,528评论 7 6
  • JavaScript中的跨域方式有两种 window.name的基本原理 A网站通过JS访问B网站的数据,首先在A...
    debug007阅读 951评论 0 1
  • 1. window.name的性质 window.name有一个奇妙的性质,页面如果设置了window.name,...
    何幻阅读 3,823评论 0 3
  • 理完发回家洗头洗脸,顿觉自己头也大脸也大啦。想我这头、脸这么一会儿就变大啦?不可能呀!哈哈。我知道,头脸哪里有什么...
    申振柱阅读 454评论 0 3

友情链接更多精彩内容