为啥 IE 11 显示空白页渲染反应应用

Posted

技术标签:

【中文标题】为啥 IE 11 显示空白页渲染反应应用【英文标题】:Why IE 11 display blank page rendering react app为什么 IE 11 显示空白页渲染反应应用 【发布时间】:2019-05-07 00:02:28 【问题描述】:

我在使用 IE 11 和我的 react 应用时遇到了问题。我使用 Webpack、babel 和 polyfill.io cdn,在渲染捆绑文件之前一切都很好,然后它停止做任何事情。 您知道可能出了什么问题吗?

提前致谢。

【问题讨论】:

我所要做的就是安装 core-js npm 包,然后将core-js/stable 添加到 webpack 配置的 entry 数组中。 ***.com/questions/55967048 你用的是es6吗?因为 IE 11 (caniuse.com/?search=class) 不支持类(在 javascript 中) 【参考方案1】:

React 不兼容 IE,

来自官方文档:

React 支持所有流行的浏览器,包括 Internet Explorer 9 及更高版本,但旧版浏览器(如 IE 9 和 IE 10)需要一些 polyfill。

我们不支持不支持 ES5 方法的旧浏览器,但是 如果使用 polyfill,您可能会发现您的应用确实可以在旧版浏览器中运行 例如 es5-shim 和 es5-sham 都包含在页面中。你在你的 如果您选择走这条路,就拥有自己。


要使您的应用程序在 IE(11 或 9)上运行,您必须安装 React-app-polyfill:

https://www.npmjs.com/package/react-app-polyfill

特点:

每个 polyfill 都确保存在以下语言特性:

Promise (for async / await support)
window.fetch (a Promise-based way to make web requests in the browser)
Object.assign (a helper required for Object Spread, i.e.  ...a, ...b )
Symbol (a built-in object used by for...of syntax and friends)
Array.from (a built-in static method used by array spread, i.e. [...arr])

用法

首先,使用 Yarn 或 npm 安装包:

npm install react-app-polyfill

现在,您可以导入要支持的最低版本的入口点。例如,如果您导入 IE9 入口点,这将包括 IE10 和 IE11 支持。

Internet Explorer 9

// This must be the first line in src/index.js
import 'react-app-polyfill/ie9';

// ...

Internet Explorer 11

// This must be the first line in src/index.js
import 'react-app-polyfill/ie11';

// ...

您还可以使用以下文档配置清单以处理不同的浏览器:https://github.com/browserslist/browserslist

例子:

"browserslist": [
    ">0.2%",
    "not dead",
    "ie >= 9"
]

更多信息来自official site

【讨论】:

现在我得到 SCRIPT5007: Unable to set property 'find' of undefined or null reference,知道为什么吗? Array.find() 似乎与 IE 完全不兼容:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… 我不知道 babel 能不能解决这个问题 得到同样的错误,但这个解决方案对我不起作用。 @Treycos 有什么建议吗?此解决方案不适用于我 你能回答这个***.com/questions/57435567/…【参考方案2】:

react-app-polyfill 包将有助于在 ie9 和 ie11 中使用 react 应用程序。这将适用于开发和生产环境。

请按照步骤 1. 编辑 index.js 文件并在文件的最顶部添加以下行。

    import 'react-app-polyfill/ie9';
    import 'react-app-polyfill/ie11';
    import 'react-app-polyfill/stable';

    编辑 Package.json 文件并在浏览器列表的开发部分添加“ie 11”。默认的产品清单非常丰富,确实包括 11 个,已经通过 >0.2%

    "browserslist": 
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version",
      "ie 11"
    ]
    

    删除整个 node_modules 文件夹

    运行 npm install 重新安装 node_modules

    运行 npm start 再次运行

【讨论】:

【参考方案3】:

对于其他偶然发现此问题的人,

如果 react-app-polyfill 不适合你,请尝试 core-js。

$ npm install core-js

确保这是 src/index.js 文件中的第一行:

import 'core-js/stable'

此外,您在开发过程中可能看不到修复。

对我来说,问题仅在生产版本(react build)中得到解决

【讨论】:

【参考方案4】:

react-app-polyfills 仅适用于生产环境,不适用于开发环境。构建、部署然后测试它。

【讨论】:

对我来说,它只能在本地(npm start)中工作,但在部署(npm run build)中它不起作用:(【参考方案5】:

试试下面的方法一定可以解决问题:-

第一步:- 首先安装包:-

npm install react-app-polyfill

or

yarn add react-app-polyfill

第 2 步: - 在您的 index.js 文件顶部添加以下命令:-

import 'react-app-polyfill/ie11';

import 'react-app-polyfill/stable';

第 3 步:- 在您的 package.json 文件中将 browserlist 部分替换为以下内容:-

  "browserslist": 
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all",
      "ie >= 9"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version",
      "ie 11"
    ]
  

第四步:- 删除node-module、package.lock.json、yarn.lock,然后运行以下命令:-

 yarn

 yarn start

or
npm install

npm start

【讨论】:

在我的情况下,我还必须将 tsconfig.json 中的目标降到 es5,以解决 ie11 不支持的箭头功能问题。否则,这个解决方案对我有用。 (或者你可以重写,但是我喜欢我的源代码中的箭头函数,因为它使它更具可读性恕我直言。【参考方案6】:

如果您在减速器中使用 Object.assign()(例如)或 IE11 不支持不使用 polyfill 的其他一些函数,您将遇到此问题。

【讨论】:

我有一个 polyfill,似乎问题导致 export const 你能回答这个***.com/questions/57435567/…【参考方案7】:

我尝试了上面提供的解决方案,但仍然无法让页面在 IE11 和我的旧 ios 9.3.2 上运行...

我完全按照@Treycos@Kurisubo 的建议做了,但没有解决方案;要解决此问题,必须将我的功能组件中的 es6 箭头功能替换为老式的声明式样式,并在 IE 11 和 iOS 9.3.2 上加载页面

注意:此功能组件是页面上呈现的第一个组件

在此处添加此内容,以便将来有人可以受益。

【讨论】:

阿克伯,你是个传奇!这正是我遇到的问题。你真的帮了我。谢谢。【参考方案8】:

对于那些尝试使用“react-app-polyfill/xxx”但未成功的人。

首先:确保将它们导入您的“index.js”文件(带有“ReactDOM.render(...)”的文件。

第二:确保在代码顶部导入它。上面的“从'react'导入React。”

【讨论】:

【参考方案9】:

似乎没有任何 polyfill 有帮助,所以我调试了很长时间,终于从 React 开发人员的“错误”中找出了答案(仅在 IE11 开发工具中看到):

The above error occurred in the <h2> component:
in h2 (created by CMSHeading)
// ...

其中有:

const 
  ...styles
 = this.props;
return (<h2 styles=styles>...</h2>);

唯一的问题是我不小心发送了其他东西,不仅是 css 样式,还有对象等。所以我确保我只发送真正的样式,然后一切又开始工作了 :)

【讨论】:

以上是关于为啥 IE 11 显示空白页渲染反应应用的主要内容,如果未能解决你的问题,请参考以下文章

React Router 渲染空白页

为啥vue打包后出现后 在浏览器上打开的是空白页

为啥IIS打开PHP页面是空白

chrome正常安装后没法正常打开,打开就是空白页,啥也没有,双击没反应

chrome总是空白页,打开网页总是显示无标题,如下图,急,在线等

chrome为啥打开是空白页