• vue解决浏览器兼容性问题


    在 vue cli2 项目中使用Vuex时,ie浏览器会出现“Vuex requires a Promise polyfill in this browser”的错误提示,这是因为使用了ES6 Promise,而IE浏览器不支持,解决方案如下:

    1. 安装babel-polyfill 执行以下命令,重启服务器:
    npm install --save babel-polyfill

    2.在main.js引入
    import 'babel-polyfill'

    3.在webpack.base.conf.js中配置:
    entry: {
    app: ['babel-polyfill','./src/main.js']
    },

    vue-cli3下 解决浏览器兼容性问题

    1. 安装babel-polyfill依赖
    npm i babel-polyfill --save-dev

    2.在src同级目录下新建vue.config.js文件配置如下

    module.exports = {
    configureWebpack: {
    devServer: {
    proxy: {
    //名字可以自定义,这里我用的是api/
    '/api/': {
    target: 'https://www.1111.com', //设置你调用的接口域名和端口号 别忘了加http
    ws: true, // 是否代理websockets
    changeOrigin: true, //这里设置是否跨域
    pathRewrite: {
    '^/api/': 'https://www.1111.com'
    }
    }
    }
    }
    },
    chainWebpack: config => {
    // 其他配置
    config.entry('main').add('babel-polyfill') // main是入口js文件
    // 其他配置
    }
    }

    系统兼容IE浏览器问题以及解决方案
    问题
    vue项目在IE浏览器上运行时会出现兼容性问题:JavaScript语法报错,css样式错乱。原因是在IE(以IE11为例)浏览器下,部分js的写法需要改变,部分样式在IE浏览器上不支持,以及一些IE浏览器特有的问题。

    vue 只兼容ie8以上版本;

    IE 不兼容 axios的promiss对象;

    IE 不兼容es6语法;

    解决方案
    下载对应插件包解决js兼容性问题:babel-polyfill,es6-promise以及 babel-plugin-transform-es2015-modules-commonjs

    一、关于babel-polyfill

    1、说明:This will emulate a full ES2015+ environment and is intended to be used in an application rather than a library/tool. This polyfill is automatically loaded when using babel-node.(模拟ES2015以上的环境,主要用于对ES6新语法不支持的浏览器);

    2、安装:npm install --save babel-polyfill;

    3、配置:module.exports = { entry: [“babel-polyfill”, “./src/main.js”] };

    4、main.js中配置:import ‘babel-polyfill’ //放在最顶部,确保全面加载

    二、关于es6-promise

    1、说明:若在项目中使用了ES6 promise对象,它在Chrome、Safari浏览器下可以正常运行,但在360兼容模式、IE内核中不支持;

    2、安装:npm install es6-promise;

    3、配置:在main.js中加入require(‘es6-promise’).polyfill(),用于在node或浏览器中支持ES6 与CommonJS。

    因为项目中require和import混用的原因,在做了IE兼容之后打包会出现问题,会报以下错误:

    Cannot assign to read only property 'exports' of object '#<Object>'

    此时就需要安装babel-plugin-transform-es2015-modules-commonjs插件来解决报错

    先安装:

    npm install --save-dev babel-plugin-transform-es2015-modules-commonjs

    然后再 .babelrc 中添加该插件

    "plugins": ["transform-es2015-modules-commonjs"]

    安装完以上插件之后,还需要做相关配置的修改,具体操作如下:

    vue.config.js文件chainWebpack方法中添加

    config.entry.app = ["babel-polyfill", "./src/main.js"];
    config.module.rule('compile')
    .test(/\.js$/)
    .include
    .add(resolve('src'))
    .add(resolve('test'))
    .add(resolve('node_modules/webpack-dev-server/client'))
    .add(resolve('node_modules'))
    .end()
    .use('babel')
    .loader('babel-loader')
    .options({
    presets: [
    ['@babel/preset-env', {
    modules: false
    }]
    ]
    });

    babel.config.js中对应修改,添加sourceType和useBuiltIns:

    module.exports = {
    presets: [
    // '@vue/cli-plugin-babel/preset', //文件原始内容
    ['@vue/app', {
    useBuiltIns: 'entry', //添加的内容
    }]
    ],
    sourceType: 'unambiguous'
    }

    main.js中代码顶部加入对应引用:

    import 'babel-polyfill'
    import Es6Promise from 'es6-promise'
    require('es6-promise').polyfill()
    Es6Promise.polyfill()Plain Text

    以上就是处理IE浏览器js兼容问题,至于css样式兼容,则需要对应修改对应文件样式,在IE浏览和chrome浏览器上分别测试,两边都适配才可以。

  • 相关阅读:
    Sqlite判断字段存在
    JS实现返回上一页面并刷新(转)
    WebService上传文件到服务器(转)
    ASP.NET中的DES加密解密,可用于URL传参(转)
    my97日期控件网址
    window.open用法详解(转)
    repeater绑定后alter不能弹出的解决办法(转)
    SQL Server之其他函数——类型转换函数(convert用法)(转)
    asp.net 无刷新分页时无法弹出alert对话框的解决方法 (转)
    UVa
  • 原文地址:https://www.cnblogs.com/xiaoxiao95/p/16354467.html
Copyright © 2020-2023  润新知