美文网首页
同源与跨域(二)

同源与跨域(二)

作者: DHFE | 来源:发表于2018-04-24 23:52 被阅读8次

    降域

    在当前页面下的iframe的域名若与当前页面的域名不同源,则当前页面的js代码对iframe无法进行任何操作。
    原因:这是为了保护用户在iframe中登录其他网站或与之类似的相关操作会泄露隐私数据

    http://a.example.dirhttp://b.example.dir,后面的example.dir相同,那么就可以使用document.domain将二者的域名设置为example.dir来实现同源。
    • 顶级域名无法降域
    • 不仅当前页面要使用document.domain,iframe的源页面也要使用document.domain

    降域主要针对于当前页面下的iframe

    修改host文件使得不同域名映射至同一个IP地址,即可测试JSONP跨域

    现在假设在http://a.example.dir/a.html页面里有一个iframe,src是http://b.example.dir/b.html,这个页面与它里面iframe框架是不同域的,所以我们无法通过页面中JS代码来读取iframe。

    <script>
        function onload() {
            var iframe = document.getElementById("iframe");
            var win = iframe.contentWindow;    // 这里能够获取到iframe里的window对象,但是不可用
            var doc = win.document;            // 这里获取不到iframe里的document对象
            var name = win.name;               // 这里获取不到window对象的name属性
        }
    </script>
        <iframe id="iframe" src="http://b.example.com:8080/b.html" onload="onload()"></iframe>
    </body>
    

    但是我们可以使用document.domain,我们只要把http://a.example.com/a.htmlhttp://b.example.com/b.html这两个页面的document.domain都设成相同的域名就可以了。

    http://a.example.com/a.html中设置document.domain

    <iframe id="iframe" src="http://b.example.com/b.html" onload="domain()"></iframe>
    <script>
        document.domain = "example.com";       // 设置成主域
        function domain() {
            console.log(document.getElementById("iframe").contentWindow);
        }
    </script>
    

    document.domain的设置是有限制的,我们只能把document.domain设置成自身或更高一级的父域,且主域必须相同。例如:a.b.example.com 中某个文档的document.domain 可以设成a.b.example.comb.example.comexample.com中的任意一个,但是不可以设成 c.a.b.example.com,因为这是当前域的子域,也不可以设成baidu.com,因为主域已经不相同了。
    作者:范小饭_
    链接:https://www.jianshu.com/p/c71c20e98f94


    postMessage

    window.postMessage
    html5跨域通信之postMessage的用法
    实现两个窗口通信方法-postMessage


    相关文章

      网友评论

          本文标题:同源与跨域(二)

          本文链接:https://www.haomeiwen.com/subject/ydsslftx.html