vue填坑之解決部分瀏覽器不支援pushState方法
前端使用vue-router做單頁面路由並開啟history模式時,會碰到一個問題:部分低版本的手機瀏覽器、部分app以及IE9瀏覽器由於不支援pushState方法,會導致頁面載入不出來。
解決這個問題的思路是:
1. 當瀏覽器支援pushState方法時,開啟history模式,不支援則開啟hash模式
2. 對連結做判斷,當跳轉的連結與路由模式不匹配時,則跳轉至正確的連結
3. 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;
}
}
相關文章
- 瀏覽器 history location pushstate的解決疑問瀏覽器
- win10瀏覽器打不開部分網頁怎麼解決_window10瀏覽器打不開網頁處理方法Win10瀏覽器網頁
- Edge瀏覽器被搜狗瀏覽器篡改的解決方法瀏覽器
- ie瀏覽器打不開網頁怎麼辦 網路正常但是ie瀏覽器打不開解決方法瀏覽器網頁
- win10 edge瀏覽器打不開影片的解決方法Win10瀏覽器
- getElementsByClassName()方法的瀏覽器支援版本瀏覽器
- 谷歌瀏覽器打不開網頁怎麼解決 谷歌瀏覽器電腦上無法開啟網頁解決方法谷歌瀏覽器網頁
- win10 edge瀏覽器打不開視訊的解決方法Win10瀏覽器
- 理解瀏覽器歷史記錄(2)- hashchange、pushState瀏覽器
- win10谷歌瀏覽器打不開網頁怎麼辦_win10打不開谷歌瀏覽器的解決方法Win10谷歌瀏覽器網頁
- 瀏覽器支援ES6的最優解決方案瀏覽器
- windows10系統下360瀏覽器打不開的解決方法Windows瀏覽器
- vue微信填坑Vue
- history pushState 實現瀏覽器前進與後退瀏覽器
- WIN10瀏覽器打不開LOL官網怎麼辦 win10瀏覽器LOL網站打不開解決方法Win10瀏覽器網站
- 操縱瀏覽器歷史記錄 : popstate() 、 history.pushState() 、 window.history.pushState()瀏覽器
- IE8瀏覽器下,解決jQuery append方法不生效的問題瀏覽器jQueryAPP
- Win10系統360瀏覽器收藏欄不見了的解決方法Win10瀏覽器
- Win10系統ie瀏覽器打不開的2種解決方法Win10瀏覽器
- 解決css瀏覽器不相容萬能方法CSS瀏覽器
- HTML5 之瀏覽器支援介紹HTML瀏覽器
- win10ie瀏覽器不支援付款怎麼解決_win10ie瀏覽器不支援付款如何修復Win10瀏覽器
- windows10系統下360瀏覽器打不開網頁的解決方法Windows瀏覽器網頁
- win10瀏覽器設定不了主頁怎麼辦_win10瀏覽器主頁修改不過來解決方法Win10瀏覽器
- HTML5支援所有瀏覽器的SHIV解決方案HTML瀏覽器
- IE瀏覽器無法儲存cookie的解決方法瀏覽器Cookie
- 監聽瀏覽器返回,pushState,popstate 事件,window.history物件瀏覽器事件物件
- onscroll事件的瀏覽器支援事件瀏覽器
- 【爬坑日記】使用webpack、babel-loader/babel-polyfill解決ie瀏覽器不支援es6WebBabel瀏覽器
- google瀏覽器打不開網頁是怎麼回事 谷歌瀏覽器無法上網怎麼解決Go瀏覽器網頁谷歌
- Google瀏覽器主頁被搜狗導航劫持解決方法Go瀏覽器
- 瀏覽器url傳參中文時得到null的解決方法瀏覽器Null
- React Native填坑之旅--多平臺支援之WebReact NativeWeb
- .finally is not a function —— 解決低版本瀏覽器axios不支援finallyFunction瀏覽器iOS
- Android 8.0 的部分坑及對應解決方法Android
- win10系統下360瀏覽器卡死的解決方法Win10瀏覽器
- [譯] 瀏覽器中 CSS 支援指南瀏覽器CSS
- 瀏覽器原生支援平滑滾動瀏覽器