跨窗口通信

  1. 一个 iframe 标签承载了一个单独的嵌入的窗口,它具有自己的 document 和 window。
  2. 当我们访问嵌入的窗口中的东西时,浏览器会检查 iframe 是否具有相同的源。如果不是,则会拒绝访问(对 location 进行写入是一个例外,它是会被允许的)。
  3. iframe.onload vs iframe.contentWindow.onload
  4. 子域上的 window:document.domain
  5. 不应该对尚未加载完成的 iframe 的文档进行处理,因为那是 错误的文档。
  6. 集合:window.frames,获取 iframe 的 window 对象的另一个方式是从命名集合 window.frames 中获取:
  7. 一个 iframe 内可能嵌套了其他的 iframe。相应的 window 对象会形成一个层次结构(hierarchy)。
  8.         
                window.frames[0].parent === window; // true
            
        
            
                if (window == top) { // 当前 window == window.top?
                    alert('The script is in the topmost window, not in a frame');
                } else {
                    alert('The script runs in a frame!');
                }
            
        

跨窗口通信

postMessage 接口允许窗口之间相互通信,无论它们来自什么源。前提是它们双方必须均同意并调用相应的 JavaScript 函数。