你的浏览器不支持canvas

Enjoy life!

javasript -跨域 - document.domain和iframe

Date: Author: JM

本文章采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 进行许可。

一、什么是document.domain

1.1 简介

  • domaindocument的一个属性,表示页面的域名。
  • document.domain可写可读。

1.2 注意事项

  • 由于安全限定,并不是可以为 document.domain设置任何值,即:只能是一级域名
    • 例:
//假设页面来自 p2p.wrox.com 域
document.domain = "wrox.com"; // 成功
document.domain = "nczonline.net"; // 出错!

//假设页面来自 p1p.wrox.com 域
document.domain = "wrox.com"; // 成功

补充一级域名:
www.iisp.com这种形式的域名并不是一级域名,他只是一个二级域名,也就是说www只是一个主机名。 真正的一级域名是由一个合法字符串+域名后缀组成。所以,iisp.com这种形式的域名才是一级域名。iisp是域名主体,.com是域名后缀。

二、document.domain和iframe实现跨域

  • 要求:只能是“同一 一级域名”下的页面才能通过document.domain以及iframe实现跨域,否则不可行。
  • 实战:
    • p2p.wrox.com下的test.html先通过iframe引入http://wrox.com/a.html,同时 document.domain 设置成 wrox.com,当 iframe 加载完毕后就可以获取 huhu.com 域下的全局对象,
    • wrox.com下的a.html需要也将document.domain 设置成 wrox.com
    • 最终获取p2p.wrox.com下的test.html成功获取wrox.com下的test.json的数据
  • p2p.wrox.com/test.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>html</title>
</head>
<body>
    <div>test.html</div>
    <iframe style = "display : none" name = "iframe1" id = "iframe" src="http://wrox.com/a.html" frameborder="0"></iframe>
    <script type="text/javascript">
        (function() {
            try{
              document.domain = "wrox.com"
          }catch(e){}
          
          var xhr = new XMLHttpRequest();
          
          xhr.onreadystatechange = () => {
            if (xhr.readyState === 4) {
                //...
            } else {
              console.log(xhr.status, xhr.statusText);
            }
           }
      
          xhr.open('get', 'http://wrox.com/test.json');
          xhr.send(null);
        })();
      
    </script>
</body>
</html>
  • wrox.com/a.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>html</title>
    <script type="text/javascript">
        (function() {
           try{
               document.domain = "huhu.com"
            }catch(e){}
        }()
    </script>
</head>
<body>
    <div id = "div1">a页面</div>
</body>
</html>

对于本文内容有问题或建议的小伙伴,欢迎在文章底部留言交流讨论。