详解vue填坑之解决部分浏览器不支持pushState方法


Posted in Javascript onJuly 12, 2018

前端使用vue-router做单页面路由并开启history模式时,会碰到一个问题:部分低版本的手机浏览器、部分app以及IE9浏览器由于不支持pushState方法,会导致页面加载不出来。 解决这个问题的思路是:

  • 当浏览器支持pushState方法时,开启history模式,不支持则开启hash模式
  • 对链接做判断,当跳转的链接与路由模式不匹配时,则跳转至正确的链接
  • nginx对域名下的路径访问均重写向至index.html

以下为具体实现方法:

判断使用何种路由模式

let isHans = typeof (history.pushState) === 'function';
let mode = isHans?'history':'hash';

判断请求链接

每次进入路由时,判断请求链接跳转的链接与路由模式不匹配时,则跳转至正确的链接

router.beforeEach(async (to, from, next) => {
  let toPath = to.fullPath,host = 'http://abc.cn';
  let url = host + toPath;
  let reUrl = url;
  if(isHans && url.indexOf(`${host}/#/`) >-1){
    reUrl = url.replace(`${host}/#/`,`${host}/car-insurance/`);
  }
  if(!isHans && url.indexOf(`${host}/#/`) === -1){
    reUrl = url.replace(`${host}/car-insurance/`,`${host}/#/`);
    reUrl = reUrl.replace(`${host}/`,`${host}/#/`);
  }
  if(reUrl !== url){
    window.location.replace(reUrl);
    return
  }

配置nginx

server {
  listen 80;
  listen 443;
  server_name abc.cn;
  root /data/html;
  index index.html index.htm index.json;

  access_log off ;
  set $isIndex 1;
  ##判断IE6-8
  if ($http_user_agent ~* "MSIE [6-8].[0-9]") {
    rewrite .* /static/ie8.html break;
  }

  if ( $request_uri ~* "/(favicon.ico|index.js|root.txt|jd_root.txt)$" ) {
   #不跳转到index.html
    set $isIndex 0;
  }
  if ( $request_uri ~* "/static/" ) {
   #不跳转到index.html
    set $isIndex 0;
  }

  if ($isIndex = 1 ){
      set $inIndexJS 0;
      rewrite .* /index.html;
      break;
   }
}a

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js 加载时自动调整图片大小
May 28 Javascript
原生JS实现响应式瀑布流布局
Apr 02 Javascript
jquery获取url参数及url加参数的方法
Oct 26 Javascript
Bootstrap每天必学之按钮(一)
Nov 24 Javascript
jquery设置表单元素为不可用的简单代码
Jul 04 Javascript
Angularjs在初始化未完毕时出现闪烁问题的解决方法分析
Aug 05 Javascript
js实现select选择框效果及美化
Aug 19 Javascript
React Native 通告消息竖向轮播组件的封装
Aug 25 Javascript
layui禁用侧边导航栏点击事件的解决方法
Sep 25 Javascript
Vue 中使用 typescript的方法详解
Feb 17 Javascript
javascript设计模式 ? 中介者模式原理与用法实例分析
Apr 20 Javascript
原生JavaScript写出Tabs标签页的实例代码
Jul 20 Javascript
vue插件开发之使用pdf.js实现手机端在线预览pdf文档的方法
Jul 12 #Javascript
vue中如何实现pdf文件预览的方法
Jul 12 #Javascript
js+css实现红包雨效果
Jul 12 #Javascript
基于vue cli 通过命令行传参实现多环境配置
Jul 12 #Javascript
vue内置组件transition简单原理图文详解(小结)
Jul 12 #Javascript
vue-resource请求实现http登录拦截或者路由拦截的方法
Jul 11 #Javascript
vue.js实现的经典计算器/科学计算器功能示例
Jul 11 #Javascript
You might like
phplock(php进程锁) v1.0 beta1
2009/11/24 PHP
深入PHP获取随机数字和字母的方法详解
2013/06/06 PHP
提高PHP编程效率的方法
2013/11/07 PHP
laravel安装和配置教程
2014/10/29 PHP
PHP中Http协议post请求参数
2015/11/02 PHP
js控制table合并具体实现
2014/02/20 Javascript
详解JavaScript基于面向对象之创建对象(1)
2015/12/10 Javascript
js实现图片上传并正常显示
2015/12/19 Javascript
谈谈我对JavaScript中typeof和instanceof的深入理解
2015/12/25 Javascript
浏览器环境下JavaScript脚本加载与执行探析之动态脚本与Ajax脚本注入
2016/01/19 Javascript
vue表单绑定实现多选框和下拉列表的实例
2017/08/12 Javascript
利用Node.js检测端口是否被占用的方法
2017/12/07 Javascript
基于JS实现前端压缩上传图片的实例代码
2019/05/14 Javascript
更强大的vue ssr实现预取数据的方式
2019/07/19 Javascript
js判断浏览器的环境(pc端,移动端,还是微信浏览器)
2020/12/24 Javascript
vant-ui AddressEdit地址编辑和van-area的用法说明
2020/11/03 Javascript
windows下ipython的安装与使用详解
2016/10/20 Python
Python读取MRI并显示为灰度图像实例代码
2018/01/03 Python
详解Python列表赋值复制深拷贝及5种浅拷贝
2019/05/15 Python
python 叠加等边三角形的绘制的实现
2019/08/14 Python
Python3操作MongoDB增册改查等方法详解
2020/02/10 Python
Django Admin后台添加数据库视图过程解析
2020/04/01 Python
TensorFlow打印输出tensor的值
2020/04/19 Python
浅析Python 简单工厂模式和工厂方法模式的优缺点
2020/07/13 Python
关于webview适配H5上传照片或者视频文件的方法
2020/11/04 HTML / CSS
携程旅行网:中国领先的在线旅行服务公司
2017/02/17 全球购物
英国时尚运动品牌的合集:The Sports Edit
2017/12/20 全球购物
工程造价自荐信
2013/10/09 职场文书
学校食堂采购员岗位职责
2013/12/05 职场文书
班主任工作经验交流材料
2014/05/13 职场文书
五一口号
2014/06/19 职场文书
党员四风自我剖析材料思想汇报
2014/09/13 职场文书
再婚婚前财产协议书范本
2014/10/19 职场文书
深入理解python协程
2021/06/15 Python
单机多实例部署 MySQL8.0.20
2022/05/15 MySQL
本地搭建minio文件服务器(使用bat脚本启动)的方法
2022/07/15 Servers