为啥 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 显示空白页渲染反应应用的主要内容,如果未能解决你的问题,请参考以下文章
chrome正常安装后没法正常打开,打开就是空白页,啥也没有,双击没反应