详解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中匿名函数的N种写法
Sep 08 Javascript
10分钟学会写Jquery插件实例教程
Sep 06 Javascript
JavaScript截取指定长度字符串点击可以展开全部代码
Dec 04 Javascript
JavaScript的new date等日期函数在safari中遇到的坑
Oct 24 Javascript
JavaScript生成.xls文件的代码
Dec 22 Javascript
Bootstrap 轮播(Carousel)插件
Dec 26 Javascript
js实现自定义进度条效果
Mar 15 Javascript
jQuery实现动态给table赋值的方法示例
Jul 04 jQuery
javascript自定义事件功能与用法实例分析
Nov 08 Javascript
vue 利用路由守卫判断是否登录的方法
Sep 29 Javascript
Vue项目vscode 安装eslint插件的方法(代码自动修复)
Apr 15 Javascript
解决vant框架做H5时踩过的坑(下拉刷新、上拉加载等)
Nov 11 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
转PHP手册及PHP编程标准
2006/12/17 PHP
require(),include(),require_once()和include_once()的异同
2007/01/02 PHP
ASP和PHP都是可以删除自身的
2007/04/09 PHP
thinkphp3.x中cookie方法的用法分析
2016/05/19 PHP
PHP接口继承及接口多继承原理与实现方法详解
2017/10/18 PHP
PHP7.3.10编译安装教程
2019/10/08 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
2019/12/25 PHP
屏蔽Flash右键信息的js代码
2010/01/17 Javascript
JQuery select控件的相关操作实现代码
2012/09/14 Javascript
JS动态修改iframe高度和宽度的方法
2015/04/01 Javascript
JS实现弹出浮动窗口(支持鼠标拖动和关闭)实例详解
2015/08/06 Javascript
javascript实现连续赋值
2015/08/10 Javascript
jquery常用函数与方法汇总
2015/09/01 Javascript
require.js的用法详解
2015/10/20 Javascript
js实现兼容IE、Firefox的图片缩放代码
2015/12/08 Javascript
JavaScript从0开始构思表情插件
2016/07/26 Javascript
ionic实现带字的toggle滑动组件
2016/08/27 Javascript
JS实现的点击表头排序功能示例
2017/03/27 Javascript
javascript checkbox/radio onchange不能兼容ie8处理办法
2017/06/13 Javascript
js实现城市级联菜单的2种方法
2017/06/23 Javascript
AngularJS 表单验证手机号的实例(非必填)
2017/11/12 Javascript
Vue文件配置全局变量的实例
2018/09/06 Javascript
解决antd 下拉框 input [defaultValue] 的值的问题
2020/10/31 Javascript
python中根据字符串调用函数的实现方法
2016/06/12 Python
Python 性能优化技巧总结
2016/11/01 Python
python中reduce()函数的使用方法示例
2017/09/29 Python
Python数据分析之双色球统计两个红和蓝球哪组合比例高的方法
2018/02/03 Python
使用python代码进行身份证号校验的实现示例
2019/11/21 Python
pytorch之ImageFolder使用详解
2020/01/06 Python
如何利用python正则表达式匹配版本信息
2020/12/09 Python
印度和世界各地的精美产品:Ikka Dukka
2018/02/12 全球购物
银行开户授权委托书格式
2014/10/10 职场文书
机关干部作风建设剖析材料
2014/10/23 职场文书
幼儿园学前班幼儿评语
2014/12/29 职场文书
读后感怎么写?书写读后感的基本技巧!
2019/12/10 职场文书
python实现socket简单通信的示例代码
2021/04/13 Python