js中document.referrer實(shí)現(xiàn)移動(dòng)端返回上一頁(yè)
返回上一頁(yè),在PC端我們可以使用:history.go(-1)或者h(yuǎn)istory.back(),可以正常返回第一層。這樣,我們不需要上一頁(yè)的 url 具體是什么,只要使用 history 一般都沒(méi)啥問(wèn)題。
但是在移動(dòng)端,如果想要返回上一頁(yè)。比如從A頁(yè)面跳到B頁(yè)面,如果B頁(yè)面想返回A頁(yè)面,為了防止不會(huì)跳錯(cuò),必須要有一個(gè) < 按鈕,給它加 history.go(-1) ,返回上一層。
<a href="javascript:history.go(-1)" rel="external nofollow" class="header-back jsBack">返回</a>
那如果我們沒(méi)有返回上一頁(yè)的 < 的按鈕,在手機(jī)上怎么操作才會(huì)返回上一頁(yè),比如:從微信分享進(jìn)來(lái)的,進(jìn)入的是微信內(nèi)頁(yè),此時(shí),內(nèi)頁(yè)就是第一頁(yè),它沒(méi)有上一頁(yè),要怎么返回?這時(shí)點(diǎn)返回按鈕是沒(méi)有反應(yīng)的,不是一個(gè)好的用戶體驗(yàn),十有八九的人會(huì)誤以為是BUG,這絕對(duì)是個(gè)坑爸的問(wèn)題。
移動(dòng)端無(wú)論是原生app還是傳統(tǒng)的網(wǎng)頁(yè),返回上頁(yè)是一個(gè)比較強(qiáng)烈的需求。
javascript 有一個(gè)可以獲取前一頁(yè)面的URL地址的方法:document.referrer
document.referrer 的來(lái)源
- referrer 屬性可返回載入當(dāng)前文檔的文檔的 URL【摘自W3CSHCOOL】, 如果當(dāng)前文檔不是通過(guò)超鏈接訪問(wèn)的,那么當(dāng)前文檔的URL為NULL,這個(gè)屬性允許客戶端的 javascript 訪問(wèn) HTTP 頭部;
- referrer 屬性,我們可以從 http 頭部獲取
document.referrer 的兼容性
document.referrer IE7都支持,它的兼容性比較高,Android 5.0開始支持,iOS都支持,PC端瀏覽器從IE7就開始支持了,兼容性沒(méi)有什么大的問(wèn)題。
但是有個(gè)小小的問(wèn)題,就是 IE 會(huì)主動(dòng)清除 referref 屬性。在IE中用javascript做跳轉(zhuǎn),比如用window.location.href = “”; google如果使用document.referrer無(wú)法取到瀏覽器請(qǐng)求的HTTP referrer,因?yàn)镮E清空了。而其他主流瀏覽器Firefox和Chrome都會(huì)保留referrer,沒(méi)辦法,只好判斷,如果是IE瀏覽器,就主動(dòng)給它增加一個(gè) referrer 。這樣的原理就是給IE瀏覽器的頁(yè)面偷偷加了個(gè)鏈接,然后自動(dòng)點(diǎn)這個(gè)鏈接,于是referrer就能保留了。
var url = 'http://www.dhdzp.com';
if (/MSIE (\d+\.\d+);/.test(navigator.userAgent) || /MSIE(\d+\.\d+);/.test(navigator.userAgent))
{
var referLink = document.createElement('a');
referLink.href = url;
document.body.appendChild(referLink);
referLink.click();
}
else
{
location.href = url;
}
document.referrer 的牛X做法
解決移動(dòng)端返回上一頁(yè)的問(wèn)題,就是上面所說(shuō)的微信分享的問(wèn)題?根據(jù)【張?chǎng)涡瘛看笊竦姆椒ㄊ?,既然點(diǎn)擊上一頁(yè)沒(méi)有反應(yīng),就讓它返回首頁(yè),從首頁(yè)再進(jìn)入其它子頁(yè)面,應(yīng)該沒(méi)啥問(wèn)題。
1.根據(jù) document.referrer 的來(lái)源來(lái)判斷是否有來(lái)源信息,如果沒(méi)有,則返回首頁(yè):
if (typeof document.referrer === '') {
// 沒(méi)有來(lái)源頁(yè)面信息的時(shí)候,改成首頁(yè)URL地址
$('.jsBack').attr('href', '/');
}
這樣,當(dāng)再次點(diǎn)擊返回按鈕時(shí),就可以返回首頁(yè)了。
2.根據(jù) document.referrer 的來(lái)源url 是否為網(wǎng)站的 url,如果判斷這個(gè) url 的來(lái)路有問(wèn)題,則屏蔽該 url 下的所有信息,比如不讓其顯示圖片等??梢杂行У姆乐贡I鏈,目前百度統(tǒng)計(jì),google ads統(tǒng)計(jì),CNZZ統(tǒng)計(jì),都是用的這個(gè)方法。
無(wú)法獲取 referrer 信息的情況
下面的場(chǎng)景無(wú)法獲得 referrer 信息,以下前8條屬于【張?chǎng)涡瘛浚?/p>
- 直接在瀏覽器中輸入地址
- 使用location.reload()刷新(location.href或者location.replace()刷新有信息)
- 在微信對(duì)話框中,點(diǎn)擊進(jìn)入微信自身瀏覽器
- 掃碼進(jìn)入微信或QQ的瀏覽器
- 直接新窗口打開一個(gè)頁(yè)面
- 從https的網(wǎng)站直接進(jìn)入一個(gè)http協(xié)議的網(wǎng)站(Chrome下親測(cè))
- a標(biāo)簽設(shè)置rel="noreferrer"(兼容IE7+)
- meta標(biāo)簽來(lái)控制不讓瀏覽器發(fā)送referer
- 點(diǎn)擊 flash 內(nèi)部鏈接
- Chrome4.0以下,IE 5.5+以下返回空的字符串
- 使用 修改 Location 進(jìn)行頁(yè)面導(dǎo)航的方法,會(huì)導(dǎo)致在IE下丟失 referrer,這可能是IE的一個(gè)BUG
- 跨域
<meta content="never" name="referrer">
怎么解決無(wú)法獲取 referrer 的情況,還沒(méi)有很好的方法,盡量避免吧。
以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,同時(shí)也希望多多支持腳本之家!
- JavaScript返回上一頁(yè)的三種方法及區(qū)別介紹
- js返回上一頁(yè)并刷新代碼整理
- js返回上一頁(yè)并刷新的多種實(shí)現(xiàn)方法
- Javascript實(shí)現(xiàn)返回上一頁(yè)面并刷新的小例子
- js中的referrer返回上一頁(yè)使用介紹
- wap手機(jī)端解決返回上一頁(yè)的js實(shí)例
- JS返回上一頁(yè)實(shí)例代碼通過(guò)圖片和按鈕分別實(shí)現(xiàn)
- JS本地刷新返回上一頁(yè)代碼
- 返回上一頁(yè)并自動(dòng)刷新的JavaScript代碼
- JS實(shí)現(xiàn)返回上一頁(yè)并刷新頁(yè)面的方法分析
相關(guān)文章
JavaScript實(shí)現(xiàn)商品評(píng)價(jià)五星好評(píng)
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)商品評(píng)價(jià)五星好評(píng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-11-11
微信小程序?qū)崿F(xiàn)菜單左右聯(lián)動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)菜單左右聯(lián)動(dòng)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07
JavaScript解構(gòu)賦值的5個(gè)常見場(chǎng)景與實(shí)例教程
解構(gòu)賦值是一種特殊的語(yǔ)法,它使我們可以將數(shù)組或?qū)ο蟆安鸢睘榈揭幌盗凶兞恐?因?yàn)橛袝r(shí)候使用變量更加方便,下面這篇文章主要給大家介紹了關(guān)于JavaScript解構(gòu)賦值的5個(gè)常見場(chǎng)景與實(shí)例的相關(guān)資料,需要的朋友可以參考下2021-11-11
JS函數(shù)參數(shù)的傳遞與同名參數(shù)實(shí)例分析
這篇文章主要介紹了JS函數(shù)參數(shù)的傳遞與同名參數(shù),結(jié)合實(shí)例形式分析了JS函數(shù)參數(shù)的傳遞與同名參數(shù)相關(guān)原理、使用技巧與操作注意事項(xiàng),需要的朋友可以參考下2020-03-03
Javascript-Mozilla和IE中的一個(gè)函數(shù)直接量的問(wèn)題
Javascript-Mozilla和IE中的一個(gè)函數(shù)直接量的問(wèn)題...2007-01-01
JavaScript中常用的五種數(shù)字千分位格式化方法
數(shù)字格式化是開發(fā)中經(jīng)常遇到的任務(wù),特別是在需要為數(shù)字添加千分位符或控制小數(shù)位數(shù)時(shí),以下是幾種常用的數(shù)字格式化方法,每種方法有其優(yōu)缺點(diǎn),適用于不同的需求場(chǎng)景,感興趣的小伙伴跟著小編一起來(lái)看看吧2024-12-12
javascript動(dòng)畫系列之模擬滾動(dòng)條
本文主要介紹了js動(dòng)畫模擬滾動(dòng)條的實(shí)現(xiàn)原理以及分享了通過(guò)滾動(dòng)條實(shí)現(xiàn)的幾個(gè)應(yīng)用的實(shí)例代碼:1.通過(guò)移動(dòng)滾動(dòng)條來(lái)實(shí)現(xiàn)數(shù)字的加減;2.通過(guò)拖動(dòng)滾動(dòng)條來(lái)實(shí)現(xiàn)元素尺寸的變化,以改變?cè)貙挾葹槔?3.通過(guò)拖動(dòng)滾動(dòng)條來(lái)實(shí)現(xiàn)內(nèi)容滾。需要的朋友一起來(lái)看下吧2016-12-12

