javascript - 调用 `window.open()` 后对新窗口的引用在 IE11 和 MS Edge 中返回 null

标签 javascript reactjs internet-explorer-11 microsoft-edge

我正在编写一个 React 应用程序,它应该从服务器获取数据(二进制 pdf)并在新选项卡/窗口中将其显示为 PDF。我知道如何弄清楚显示部分,问题是我的代码中对新创建窗口的引用丢失了。当您将以下文件放入普通 create-react-app 项目并导入它时,您将看到变量 _window 将在 Chrome 和 Firefox 上返回新窗口对象,但在Windows 7 (IE11) 和 Windows 10 (MS Edge) 将返回 null。

import React, { Component } from 'react';

export default class Container extends Component {
  fetch() {
    const data = {
      user: 'User1',
      text: 'This is some text',
    }
    const user = document.createElement('h2');
    user.innerHTML = data.user;
    const text = document.createElement('p');
    text.innerHTML = data.text;
    const _window = window.open('about:blank', 'w1');
    console.log(_window);
    _window.document.body.appendChild(user);
    _window.document.body.appendChild(text);
  }

  render() {
    return (
      <div>
        <button onClick={this.fetch.bind(this)}>Fetch!</button>
      </div>
    );
  }
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

这不允许我修改新创建的窗口对象的 DOM。 (我知道大多数 React 人员可能会说将其放入组件中并在那里显示,但我需要以某种方式完成此操作)。

我已经尝试阅读 thisthis并在 IE 中关闭保护模式,但它不起作用。

最佳答案

看来您的问题不是因为 IE/Edge 中的 _window 为 null,而是您尚未在 IE/Edge 中所需的子窗口上下文中创建元素。

因此,首先打开子窗口,然后在子窗口上下文中创建要附加到子窗口的元素,如下所示。

var _window = window.open('', 'w1');
var _contents = _window.document.createElement('div');

查找更新后的 codepen here .

关于javascript - 调用 `window.open()` 后对新窗口的引用在 IE11 和 MS Edge 中返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43330391/

相关文章:

javascript - SSG和SSR如何选择?

javascript - Fabric.js Canvas - 使一种对象始终位于另一种对象下方

jquery - Internet Explorer 11 和 jQuery UI

ajax - 当 ajax 目标为 localhost 时,IE 10 和 11 中的访问被拒绝

javascript - 在javascript中使用回车键作为选项卡时如何跳过隐藏字段

javascript - React 事件处理,最佳实践

javascript - 主干命名空间

javascript - 我可以在 JavaScript 中判断访问者的区域设置是遵循美国风格还是世界其他地区的风格吗?

javascript - 将 Webshim polyfill 与 ReactJS 一起使用是否安全

reactjs - React Redux 中的表单状态