Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript WindowProxy和窗口对象?_Javascript_Html - Fatal编程技术网

Javascript WindowProxy和窗口对象?

Javascript WindowProxy和窗口对象?,javascript,html,Javascript,Html,有人能解释为什么真正存在WindowProxy对象吗?我知道real Window对象通过这个对象做所有的事情,但我不理解它的用途。这个构造是为了支持html5浏览上下文模型。本质上,每个脚本都可以为其主活动窗口提供一个集中的访问点,以便在功能上解耦各个内部窗口中的瞬态引用、文档历史记录、缓存以及以上下文相关方式跟踪每个脚本的需要 以下两幅图说明了这一概念: 在上图中,浏览器窗口由每个内部窗口内容中的windowProxy引用产生别名 在上图中,顶级窗口在每个内部窗口和iframe内容中都被

有人能解释为什么真正存在WindowProxy对象吗?我知道real Window对象通过这个对象做所有的事情,但我不理解它的用途。

这个构造是为了支持html5浏览上下文模型。本质上,每个脚本都可以为其主活动窗口提供一个集中的访问点,以便在功能上解耦各个内部窗口中的瞬态引用、文档历史记录、缓存以及以上下文相关方式跟踪每个脚本的需要

以下两幅图说明了这一概念:

在上图中,浏览器窗口由每个内部窗口内容中的windowProxy引用产生别名

在上图中,顶级窗口在每个内部窗口和iframe内容中都被windowProxy引用混淆


    • 考虑以下代码:

      const-iframe=document.appendChild(document.createElement(“iframe”);
      iframe.src=“/a”;
      iframe.onload=()=>{
      const windowA=iframe.contentWindow;
      iframe.src=“/b”;
      iframe.onload=()=>{
      const windowB=iframe.contentWindow;
      log(“导航前的窗口===导航后的窗口?”,windowA==windowB);
      };
      };
      
      事实证明这是真的。而且,许多网站都依赖于这一点:它们在导航之前获取对
      iframe.contentWindow
      ,或者可能是
      window.frames[0]
      的引用。然后他们在导航后继续使用它

      (注意,在我们的示例中,我们通过执行
      iframe.src=“/b”启动了导航。)
      。因此,从理论上讲,我们当时可能知道如何获取对
      iframe.contentWindow
      的新引用。但在一般情况下,导航可以在不涉及外部框架的情况下进行,例如,用户可以单击iframe中的链接,或者iframe中的代码可以执行
      location.href=“/c”

      这怎么可能是真的?毕竟,我们导航到了一个完全不同的页面——它将有一个新的
      窗口
      (具有一个新的全局范围,没有被上一页声明的任何全局范围所污染),一个新的
      文档
      ,等等

      这是真的,因为
      WindowProxy
      iframe.contentWindow
      ,或
      window.frames[0]
      ,或尝试访问窗口的任何其他方式,返回
      WindowProxy
      对象,而不是
      window
      对象。该
      WindowProxy
      对象委托给当前
      窗口的任何对象。在我们的示例中,它在导航之前为
      /a
      委派
      窗口
      ,在导航之后为
      /b
      委派
      窗口