【问题标题】:The window object does not have the properties attached to it by the page that created it窗口对象没有由创建它的页面附加的属性
【发布时间】:2017-09-21 07:31:50
【问题描述】:

我使用window.open(url, target) 在新选项卡/窗口中打开url。在此之前,我在新打开的窗口对象上设置了一些属性,目的是将数据从这个页面(新窗口的创建者)传递给新创建的窗口。

在除 Internet Explorer 之外的所有浏览器中,代码都可以正常工作。新创建的页面能够从代表其窗口的全局window 对象中读回属性。

但是,只有在 Internet Explorer 11 中,新创建的窗口中的window 对象没有上一页传入的属性。

下面是演示问题的示例代码。

Page1.html

<script type="text/javascript">
    function openNewPage(value1, value2)
    {
        var newWindow = window.open('Page2.html', '_blank')

        newWindow.property1 = value1;
        newWindow.property2 = value2;
    }
</script>

Page2.html

<body onload = "bodyLoadHandler()">
    <script type="text/javascript">
        function bodyLoadHandler() {

            // Both of these returned undefined
            // whether referenced explicitly
            // as window.property1 or as 
            // this.property1. I prefer the explicit
            // window.property1 way because of the screwed up
            // this pointer and its ensuing issues in JavaScript.

            // This happens only
            // in IE. The code runs fine in other browsers.
            var property1 = window.property1;
            var property2 = window.property2;
        }
    </script>
</body>

【问题讨论】:

  • 没有要测试的 IE,当您等待 newWindow.onload 事件或即使您等待 2 秒时也会发生同样的情况吗?你能从主属性访问newWindow 的属性吗?

标签: javascript internet-explorer internet-explorer-11


【解决方案1】:

window.openerSharedWorkerpostMessagestorage 事件一起使用

Page1.html

<script>
  function openNewPage(value1, value2) {
    var newWindow = window.open('Page2.html', '_blank')

    this.property1 = value1;
    this.property2 = value2;
  }
  openNewPage(1, 2)
</script>

Page2.html

<body onload="bodyLoadHandler()">
  <script type="text/javascript">
    function bodyLoadHandler() {
      var property1 = window.opener.property1;
      var property2 = window.opener.property2;
      console.log(property1, property2);
    }
  </script>
</body>

plnkrhttp://plnkr.co/edit/Gy5FFhvobFoBAbc8UnBY?p=preview

另见How can I load a shared web worker with a user-script?Can the mechanism that loads the worker in Shared Web Workers be modified?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    • 2021-11-08
    • 2015-12-03
    • 2012-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多