详解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 相关文章推荐
JQuery表格内容过滤的实现方法
Jul 05 Javascript
在ASP.NET中使用JavaScript脚本的方法
Nov 12 Javascript
JS弹出层单纯的绝对定位居中示例代码
Feb 18 Javascript
javascript学习笔记--数字格式类型
May 22 Javascript
jQuery插件实现大图全屏图片相册
Mar 14 Javascript
JavaScript控制网页平滑滚动到指定元素位置的方法
Apr 17 Javascript
JavaScript实现带缓冲效果的随屏滚动漂浮广告代码
Nov 06 Javascript
input file上传 图片预览功能实例代码
Oct 25 Javascript
Vue实现动态响应数据变化
Apr 28 Javascript
浅谈redux以及react-redux简单实现
Aug 28 Javascript
TypeScript 运行时类型检查补充工具
Sep 28 Javascript
JavaScript实现雪花飘落效果
Dec 27 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
使用Limit参数优化MySQL查询的方法
2008/11/12 PHP
PHP 危险函数解释 分析
2009/04/22 PHP
php面向对象全攻略 (四)构造方法与析构方法
2009/09/30 PHP
发款php蜘蛛统计插件只要有mysql就可用
2010/10/12 PHP
PHP定时任务延缓执行的实现
2014/10/08 PHP
PHP简单选择排序算法实例
2015/01/26 PHP
php基于GD库画五星红旗的方法
2015/02/24 PHP
CodeIgniter多语言实现方法详解
2016/01/20 PHP
PHP中STDCLASS用法实例分析
2016/11/11 PHP
php实现银联商务公众号+服务窗支付的示例代码
2019/10/12 PHP
js实现checkbox全选和反选示例
2014/05/01 Javascript
用jQuery实现圆点图片轮播效果
2017/03/19 Javascript
jquery.masonry瀑布流效果
2017/05/25 jQuery
JavaScript基础之this详解
2017/06/04 Javascript
AngularJs导出数据到Excel的示例代码
2017/08/11 Javascript
Angular 4根据组件名称动态创建出组件的方法教程
2017/11/01 Javascript
Node.JS用纯JavaScript生成图片或滑块式验证码功能
2019/09/12 Javascript
js实现秒表计时器
2019/12/16 Javascript
Python使用Mechanize模块编写爬虫的要点解析
2016/03/31 Python
Python一键查找iOS项目中未使用的图片、音频、视频资源
2019/08/12 Python
浅谈django url请求与数据库连接池的共享问题
2019/08/29 Python
简单了解python shutil模块原理及使用方法
2020/04/28 Python
如何创建一个Flask项目并进行简单配置
2020/11/18 Python
Python中过滤字符串列表的方法
2020/12/22 Python
scrapy实践之翻页爬取的实现
2021/01/05 Python
HTML5仿手机微信聊天界面
2016/03/18 HTML / CSS
英国计算机产品零售商:Novatech(定制个人电脑、笔记本电脑、工作站和服务器)
2018/01/28 全球购物
日本最大的购物网站乐天市场国际版:Rakuten Global Market(支持中文)
2020/02/03 全球购物
Envie de Fraise意大利:法国网上推出的孕妇装品牌
2020/10/18 全球购物
社区端午节活动方案
2014/01/28 职场文书
警察群众路线整改措施
2014/09/26 职场文书
民主生活会意见
2015/06/05 职场文书
婚礼迎宾词大全
2015/08/10 职场文书
全民创业工作总结
2015/08/13 职场文书
优秀毕业生主要事迹材料
2015/11/04 职场文书
Nginx反爬虫策略,防止UA抓取网站
2021/03/31 Servers