IE浏览器中无法兼容element-ui的Loading,请问是什么原因如何解决?

新手上路,请多包涵

问题描述

项目需要兼容IE浏览器,因此放弃了vue3,使用了vue2.7, @vue/cli-service5.0, element-ui2.15.14。使用babel和core-js/stable后,项目可以在ie浏览器中运行了。但随着业务开发,引入了element-ui中的Loading组件后,在IE浏览器中就报错了,像是css loader的错误。请大佬们帮忙看看是什么原因,谢谢!

问题出现的环境背景及自己尝试过哪些方法

"dependencies":

"axios": "^1.5.0",
"core-js": "^3.8.3",
"element-ui": "^2.15.14",
"vue": "2.7",
"vue-router": "^3.5.1"

"devDependencies":

"@babel/core": "^7.12.16",
"@babel/eslint-parser": "^7.12.16",
"@vue/cli-plugin-babel": "~5.0.0",
"@vue/cli-plugin-router": "~5.0.0",
"@vue/cli-service": "~5.0.0",
"babel-plugin-component": "^1.1.1",
"compressing": "^1.10.0",
"dayjs": "^1.11.9",
"sass": "^1.32.7",
"sass-loader": "^12.0.0",
"unplugin-auto-import": "^0.16.6",
"unplugin-vue-components": "^0.25.2",
"webpack-bundle-analyzer": "^4.9.1"

试过把main.js

相关代码

粘贴代码文本(请勿用截图)
main.js

import 'core-js/stable';
import Vue from 'vue';
import App from './App.vue';
import './style/main.scss'
import { router } from './router';
import { Loading } from 'element-ui';   // Loading不支持ie ?

Vue.config.productionTip = false;
Vue.use(Loading.directive);
new Vue({
  router,
  render: (h) => h(App),
}).$mount('#app');

babel.config.js

module.exports = {
  presets: [
    '@vue/cli-plugin-babel/preset',
  ],
  plugins: [
    [
      "component",
      {
        "libraryName": "element-ui",
        "styleLibraryName": "theme-chalk"
      }
    ]
  ]
};

.browserlistrc

> 1%
last 2 versions
IE 11

vue.config.js里加了transpileDependencies 也没用 T.T

const { defineConfig } = require('@vue/cli-service')
const AutoImport = require('unplugin-auto-import/webpack')
const Components = require('unplugin-vue-components/webpack')
// const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
const { ElementUiResolver } = require('unplugin-vue-components/resolvers')

module.exports = defineConfig({
  transpileDependencies: ['axios', 'element-ui'],   // 转换node_modules
  publicPath: process.env.VUE_APP_PUBLIC_PATH,
  outputDir: 'dist',
......

你期待的结果是什么?实际看到的错误信息又是什么?

在Chrome浏览器中正常,在IE浏览器(IE11)中报错。

SCRIPT445: 对象不支持此操作
base.css (12,1)

# 点进去是这一行
var ___CSS_LOADER_URL_IMPORT_0___ = new URL(/* asset import */ __webpack_require__(/*! fonts/element-icons.woff */ "./node_modules/.pnpm/element-ui@2.15.14_vue@2.7.14/node_modules/element-ui/lib/theme-chalk/fonts/element-icons.woff"), __webpack_require__.b);
阅读 691
avatarAI BotBETA

根据你提供的信息,你的项目在IE浏览器中出现的问题是由于element-ui的Loading组件在IE浏览器中不支持导致的。具体来说,报错的原因可能和CSS加载器URL的创建有关,这通常是由于IE浏览器对某些JavaScript特性的支持不足所引起的。

要解决这个问题,可以考虑以下几种方法:

  1. 使用polyfill:你可以尝试在IE浏览器中使用polyfill来模拟缺失的JavaScript特性。Polyfill是一个小段代码,它可以通过模拟标准的API来实现与现代浏览器的兼容性。你可以使用core-js等库来提供所需的polyfill。
  2. 使用Babel插件:你可以尝试使用Babel插件来转换现代JavaScript代码为旧版本的浏览器可以理解的代码。例如,你可以使用@babel/preset-env来根据你的目标环境自动转换代码。
  3. 使用条件加载:如果以上两种方法都没有解决问题,你可以考虑在IE浏览器中使用条件加载来处理element-ui的Loading组件。你可以使用条件注释来根据浏览器的类型加载不同的脚本或样式。例如,你可以使用以下代码来在IE浏览器中加载一个备用的Loading组件:
<!--[if IE]>
  <link rel="stylesheet" href="path/to/fallback-loading.css">
<![endif]-->

在上面的代码中,"path/to/fallback-loading.css"应该是一个备用的Loading组件的样式文件,它可以在IE浏览器中提供一个类似的功能。

请注意,以上解决方案是基于你的项目环境和描述的问题,具体实现可能需要根据你的项目和IE浏览器使用的版本来进行相应的调整。另外,如果问题仍然存在,建议你查看element-ui的文档和社区支持,可能有其他用户遇到过类似的问题并找到了解决方案。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏