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

 更新时间:2018年07月12日 09:44:14   作者:Jiang Xueyang  
这篇文章主要介绍了详解vue填坑之解决部分浏览器不支持pushState方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

前端使用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

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

相关文章

  • vue项目中axios的封装请求

    vue项目中axios的封装请求

    这篇文章主要介绍了vue项目中axios的封装请求,axios 是一个轻量的HTTP客户端,它基于 XMLHttpRequest 服务来执行 HTTP 请求,支持丰富的配置,下文更多详细资料,需要的朋友可以参考一下
    2022-03-03
  • vue移动端弹框组件的实例

    vue移动端弹框组件的实例

    今天小编就为大家分享一篇vue移动端弹框组件的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • 基于 Vue 的 Electron 项目搭建过程图文详解

    基于 Vue 的 Electron 项目搭建过程图文详解

    这篇文章主要介绍了基于 Vue 的 Electron 项目搭建过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • vue 自动检测手机端响应式布局的五种实现

    vue 自动检测手机端响应式布局的五种实现

    本文主要介绍了vue自动检测手机端响应式布局,可以通过结合 CSS 媒体查询、Vue 的动态数据绑定、适当的第三方库、PostCSS 插件以及正确的视口设置实现,感兴趣的可以了解一下
    2024-07-07
  • vue2.0 自定义日期时间过滤器

    vue2.0 自定义日期时间过滤器

    本文给大家带来两种方法实现vue2.0 自定义日期时间过滤器,需要的的朋友参考下吧
    2017-06-06
  • 解决vux 中popup 组件Mask 遮罩在最上层的问题

    解决vux 中popup 组件Mask 遮罩在最上层的问题

    这篇文章主要介绍了解决vux 中popup 组件Mask 遮罩在最上层的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • vue用h()函数创建Vnodes的实现

    vue用h()函数创建Vnodes的实现

    Vue提供了一个h()函数用于创建vnodes,本文就来介绍一下vue用h()函数创建Vnodes的实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • springboot vue接口测试前端模块树和接口列表

    springboot vue接口测试前端模块树和接口列表

    这篇文章主要为大家介绍了springboot vue接口测试前端模块树和接口列表,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • Vue数据回显表单无法编辑的解决方案

    Vue数据回显表单无法编辑的解决方案

    这篇文章主要介绍了Vue数据回显表单无法编辑的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • Vue中使用flv.js播放视频的示例详解

    Vue中使用flv.js播放视频的示例详解

    这篇文章主要为大家详细介绍了如何在Vue项目中使用flv.js播放视频,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-04-04

最新评论