当vue3不再支持IE

最近在做一个to c的项目,需要兼容PC、移动端且要支持chrome、firfox、uc一大堆,vue3都不支持ie了然鹅产品经理说道:"虽然vue3不支持ie11及以下,但是用户在ie中打开的时候你给我跳转到一个提示页好了...",用下图来表示下心情~

The first round

要求:我们的项目只支持firefox58+、chrome76+、Safari10+

好说好说,那我就筛选出符合条件的呗,马不停蹄的敲代码and找度娘看各种浏览器内核的特性,最终写出如下代码

<script>
        // getVersion函数返回浏览器信息
        function getVersion() {
            const agent = navigator.userAgent.toLowerCase();
            let Browser = '';
            let Bversion = '';
            if (agent.indexOf('chrome') > 0) { // Chrome
                const regStrChrome = /chrome\/[\d.]+/gi;
                Browser = 'chrome';
                Bversion = '' + agent.match(regStrChrome);
            } else if (agent.indexOf('firefox') > 0) { // firefox
                const regStrFf = /firefox\/[\d.]+/gi;
                Browser = 'firefox';
                Bversion = '' + agent.match(regStrFf);
            } else if (agent.indexOf('safari') > 0 && agent.indexOf('chrome') < 0) { // Safari
                const regStrSaf = /version\/[\d.]+/gi;
                Browser = 'safari';
                Bversion = '' + agent.match(regStrSaf);
            }
            return {
                appName: Browser,
                appVer: (Bversion + '').replace(/[^0-9.]/ig, '').split('.')[0]
            };
        }
        window.onload = function() {
            const vInfo = getVersion();
            console.log('浏览器版本', vInfo);
            // 浏览器兼容版本:
            // firefox(58+)
            // safari(10+)
            // chrome(76+)
            const tooLow = !((vInfo.appName === 'chrome' && Number(vInfo.appVer) >= 76) ||
                (vInfo.appName === 'firefox' && Number(vInfo.appVer) >= 58) ||
                (vInfo.appName === 'safari' && Number(vInfo.appVer) >= 10));
            if (tooLow) {
                // 不符合条件的浏览器都展示不兼容页面
            }
        };
    </script>

The second round 

要求:你这做的不行呀,我们的用户还可能在微信里打开链接,也得让他访问,稍微等会,在手机上用uc浏览器也允许打开吧,呃呃那手机自带浏览器也允许好了。

绕这么大一圈,需求变成了除了ie其他都行哈哈。以下是ie内核的特点

// ieBrowser函数返回当前是否是ie浏览器
function ieBrowser() {
    var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串
    var isIE = userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1; //判断是否IE<11浏览器
    var isIE11 = userAgent.indexOf('Trident') > -1 && userAgent.indexOf("rv:11.0") > -1;
    return (isIE || isIE11) ? true : false;
}

window.onload = function() {
   var isIE = ieBrowser();
   if (isIE) {
       // 不符合条件的浏览器都展示不兼容页面
   }
};

顺带附上主流浏览器的内核

浏览器内核注释
IETridentIE,猎豹安全、360极速浏览器、百度浏览器
firfoxGecko打开速度慢、更新频繁、有个猪队友叫flash并且有个神对手chrome。注定没落
SafariWebkit
chromeChromium/Blink在Chromium项目中研发Blink渲染引擎,内置于Chrome浏览器中。Blink其实是WebKit的分支。大部分国产浏览器最新版都才用Blink内核进行二次开发。
OperaBlink

03-23
### Vue3IE 浏览器上的兼容性问题及解决方案 Vue3 的设计目标之一是提高性能并减少包体积,因此它默认不再支持老旧的浏览器环境,比如 Internet Explorer (IE)。这是因为 Vue3 使用了一些现代 JavaScript 特性(如 Proxy 和 ES Modules),而这些特性在 IE 中并不被完全支持[^1]。 #### 一、主要兼容性问题 1. **Proxy 对象不被支持** Vue3 的响应式系统依赖于 `Proxy` 来替代 Vue2 中使用的 `Object.defineProperty` 方法。然而,`Proxy` 并未在 IE 中实现,这导致 Vue3 默认无法运行在 IE 上。 2. **ES Module 支持缺失** Vue3 推荐使用原生 ES Module 加载方式,这种方式同样不受 IE 支持。即使通过打包工具转换为 CommonJS 或 UMD 格式,也需要额外处理才能适配 IE[^2]。 3. **Polyfill 缺失** 许多现代 JavaScript API(如 Promise、Array.prototype.includes 等)并未在 IE 中存在。如果项目中直接使用了这些功能,则会在 IE 下抛出语法错误或运行时异常[^3]。 --- #### 二、解决方法 ##### 1. 引入 Babel 转译 为了使 Vue3 应用能够在 IE 上运行,可以借助 Babel 将现代 JavaScript 代码转译成兼容性强的老式语法。具体操作如下: - 安装必要的依赖项: ```bash npm install --save-dev @babel/preset-env core-js@3 ``` - 修改项目的 `.babelrc` 文件或 `babel-loader` 配置,在其中指定目标浏览器范围以及启用 Polyfill 功能: ```json { "presets": [ ["@babel/preset-env", { "targets": "> 0.25%, not dead", "useBuiltIns": "usage", "corejs": { "version": 3 } }] ] } ``` 上述配置会自动检测哪些新特性和函数需要 polyfill,并仅引入所需的最小化集合。 ##### 2. 替代 Proxy 实现 由于 IE支持 `Proxy`,可以通过安装第三方库来模拟其行为。例如,`vue-compat-proxy-polyfill` 提供了一个基于 `defineProperty` 的回退方案,虽然效率较低但足以满足基本需求。 注意:此方法可能会影响应用的整体性能表现,尤其是在大型复杂数据结构下更明显。 ##### 3. Webpack 配置调整 对于采用 Vue CLI 构建的应用程序来说,默认情况下隐藏了许多底层细节设置。要针对特定场景定制构建流程,需编辑根目录下的 `vue.config.js` 文件。以下是几个重要选项说明: - 设置 output.libraryTarget=&#39;umd&#39;,以便生成通用模块定义格式; - 添加自定义 loader rules 处理静态资源路径解析差异等问题; 示例代码片段如下所示: ```javascript module.exports = { transpileDependencies: true, configureWebpack: config => { if (!process.env.NODE_ENV === &#39;production&#39;) return; Object.assign(config.resolve, { alias: { vue$: &#39;vue/dist/vue.esm-bundler.js&#39;, }, }); const plugins = []; // 插件列表... return {plugins}; }, }; ``` ##### 4. CSS 属性前缀补全 除了脚本层面外,还需关注样式表方面的跨平台一致性。推荐利用 Autoprefixer 工具自动化添加厂商专属扩展标记,从而保障视觉效果一致呈现给不同类型的访问者群体看到相同的结果。 --- ### 总结 综上所述,尽管 Vue3 原生放弃了对 IE 的官方支持,但仍可通过一系列技术手段达成一定程度上的向下兼容能力。不过需要注意的是,这种做法往往伴随着维护成本增加和技术风险上升等诸多不利因素考量进去之后再做决定是否值得投入精力去改造现有架构体系适应旧版客户端设备的需求情况下去评估价值所在之处何方最为合适合理才行得通顺自然流畅表达清楚明白无误歧义误解混淆不清模糊暧昧含糊其辞闪烁其词躲闪回避搪塞敷衍推诿扯皮拖延时间浪费生命可好? ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值