Это решение покажет вам, как использовать стек React в IE8, тогда вам не придётся менять технологический стек, когда клиент использует устаревший браузер. Оно использует ES6, Webpack, Babel, ESLint, Ant Design 1.x, React 16, Reach, Rematch и т. д. Смотрите Reactie Todo.
Выберите необходимые прокладки и полифиллы.
{
loader: 'babel-loader',
options: {
presets: [
['@babel/preset-env', {
loose: true,
modules: 'commonjs',
}]
]
}
}
// Config
[
new UglifyJsPlugin({
uglifyOptions: {
ie8: true,
...
}
})
]
// Before
var obj = { **Создание псевдонимов для упрощения импорта или требования определённых модулей**
*Модуль псевдонима:* создавайте псевдонимы для более простого импорта или запроса определённых модулей, например, используя anujs вместо React.
```javascript
// Config
{
resolve: {
alias: {
'react': 'anujs/dist/ReactIE',
'react-dom': 'anujs/dist/ReactIE',
...
}
}
}
// Code
import React from 'react'; // фактически загружен anujs
Решение проблем с ошибками
Ошибка | Причина | Решение |
---|---|---|
'JSON' is undefined |
Необходимо использовать режим стандартов IE8 | Добавьте <!DOCTYPE html> и <meta http-equiv="X-UA-Compatible" content="IE=EDGE"/>
|
Невозможно получить свойство «appendChild», которое не определено или равно null |
document.head не существует в IE8 |
Добавьте document.head = document.getElementsByTagName('head')[0]
|
Невозможно получить свойство «focus», которое не определено или равно null , происходит в this.calendarInstance.focus() (используйте antd 1.11.6) |
calendarInstance не определён, вызвано this.saveCalendarRef = refFn.bind(this, 'calendarInstance')
|
Используйте this.saveCalendarRef = refFn.bind(this, 'calendarInstance', this)
|
Object.prototype.propertyIsEnumerable: 'this' не является объектом JavaScript , происходит в функции getLocation из Reach (используйте anujs 1.4.8) |
После преобразования Babel, getLocation использует Object.prototype.propertyIsEnumerable.call(location, prop) , чтобы определить, имеет ли window.location определённые свойства, и это не работает в IE8 |
См. проблему anujs #344 |
Accessors not supported! |
Ваш код преобразуется в Object.defineProperty .Например, Redux использует библиотеку symbol-observable , которая преобразуется в Object.defineProperty
|
Найдите её и измените. Я переписал библиотеку symbol-observable |
IE8 уходит в бесконечный цикл, происходит в функции isPlainObject из Redux |
isPlainObject использует функцию getPrototypeOf es5-shim для обхода цепочки прототипов, что вызывает бесконечный цикл |
См. проблему es5-shim #458 |
Ссылка
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )