尝试在 IE11 中加载损坏的 JS 时保留 HTML 而不是显示空白页
Keep HTML instead of showing a blank page when trying to load corrupted JS in IE11
我正在开发一个节点项目,该项目在构建网站时使用 create-react-app 和 webpack 来捆绑 JavaScript 文件。我不打算支持 IE,但是我希望向使用 IE 打开应用程序的用户显示一条消息,因为默认情况下,由于 create-react-app 缺少对浏览器的支持,应用程序崩溃而没有polyfills.
想法是在 Webpack 使用的 HTML 模板中包含一个加载消息,当 React 完成渲染时将其删除。如果 React 无法正确呈现或浏览器不支持某些 JS,则加载消息应该保留在那里。但是,当浏览器中包含 JS 文件时,由于 JavaScript 文件中的错误(即 IE 不支持的功能),整个页面变成空白,因此消息也消失了。
有什么方法可以防止页面变成空白,而是保留之前的 HTML?
我建议您尝试在 index.js
文件的开头添加下面的 polyfill。
import 'react-app-polyfill/ie11';
import 'react-app-polyfill/stable';
如有必要,添加其他 polyfill。
在 package.json
文件中添加 IE 11
开发 browserlist
。
"browserslist": {
"production": [
"ie 11",
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"ie 11",
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
删除 node_modules
文件夹中的 .cache
文件夹,然后再次尝试 运行 应用程序。
应用程序应在 IE 11 浏览器中加载。
之后尝试使用下面的 JS 代码并将其添加到您的 React 应用程序中。
以下代码将使用用户代理识别 IE 浏览器,您可以向用户显示有用的消息。
function detectIE() {
var ua = window.navigator.userAgent;
var msie = ua.indexOf('MSIE ');
if (msie > 0) {
return "IE " + parseInt( ua.substring(msie + 5, ua.indexOf('.', msie)), 10);
}
var trident = ua.indexOf('Trident/');
if (trident > 0) {
var rv = ua.indexOf('rv:');
return "IE " + parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);
}
// other browser
return "false";
}
var result=detectIE();
if (result=="false")
{
document.getElementById("info").innerHTML +="<h2>Welcome to the site...</h2>";
}
else
{
document.getElementById("info").innerHTML += "<h2>Dear user you are using " + result + " This browser is not supported by this site. Kindly use supported browser...</h2>";
}
另外,您可以根据自己的需要修改代码示例。
我正在开发一个节点项目,该项目在构建网站时使用 create-react-app 和 webpack 来捆绑 JavaScript 文件。我不打算支持 IE,但是我希望向使用 IE 打开应用程序的用户显示一条消息,因为默认情况下,由于 create-react-app 缺少对浏览器的支持,应用程序崩溃而没有polyfills.
想法是在 Webpack 使用的 HTML 模板中包含一个加载消息,当 React 完成渲染时将其删除。如果 React 无法正确呈现或浏览器不支持某些 JS,则加载消息应该保留在那里。但是,当浏览器中包含 JS 文件时,由于 JavaScript 文件中的错误(即 IE 不支持的功能),整个页面变成空白,因此消息也消失了。
有什么方法可以防止页面变成空白,而是保留之前的 HTML?
我建议您尝试在 index.js
文件的开头添加下面的 polyfill。
import 'react-app-polyfill/ie11';
import 'react-app-polyfill/stable';
如有必要,添加其他 polyfill。
在 package.json
文件中添加 IE 11
开发 browserlist
。
"browserslist": {
"production": [
"ie 11",
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"ie 11",
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
删除 node_modules
文件夹中的 .cache
文件夹,然后再次尝试 运行 应用程序。
应用程序应在 IE 11 浏览器中加载。
之后尝试使用下面的 JS 代码并将其添加到您的 React 应用程序中。
以下代码将使用用户代理识别 IE 浏览器,您可以向用户显示有用的消息。
function detectIE() {
var ua = window.navigator.userAgent;
var msie = ua.indexOf('MSIE ');
if (msie > 0) {
return "IE " + parseInt( ua.substring(msie + 5, ua.indexOf('.', msie)), 10);
}
var trident = ua.indexOf('Trident/');
if (trident > 0) {
var rv = ua.indexOf('rv:');
return "IE " + parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);
}
// other browser
return "false";
}
var result=detectIE();
if (result=="false")
{
document.getElementById("info").innerHTML +="<h2>Welcome to the site...</h2>";
}
else
{
document.getElementById("info").innerHTML += "<h2>Dear user you are using " + result + " This browser is not supported by this site. Kindly use supported browser...</h2>";
}
另外,您可以根据自己的需要修改代码示例。