在之前的文章 http://blog.csdn.net/amberwu/article/details/72876635提過一嘴關於js獲取瀏覽器上一瀏覽頁面地址代碼是document.referrer
,今天看大神張鑫旭的文章,對這個問題做一個深層研究 。
一. 介紹介紹
獲取上一個頁面的URL地址,前後端都可以做,前端用js就是document.referrer
,後端PHP的是$_SERVER['HTTP_REFERER']
。
之前給pc端做活動頁面,未登錄用戶要點擊button
跳轉到登陸頁面,登陸成功要跳轉回活動頁面纔對,但是之前沒有做這個功能,我就搜了一下發現js可以實現。
但是之前都沒怎麼用過這個功能,大神幫我找到了原因:
1、後端小夥伴幫我們搞定了相關需求;
2、只有一些訪問數據統計腳本才非常在意上一個訪問頁面的url地址是什麼;
3、如果我們希望實現的功能是返回上一頁,可以使用history.go(-1)或者history.back(),我們並不需要知道上一個訪問頁面具體的地址是什麼。
先舉個history.go
的例子。
<a href="javascript:history.go(-1)">返回</a>
這個方法可以滿足大部分的交互需求,但是如果沒有上一頁的地址,這樣按返回button的時候,就失效,會造成很不好的用戶體驗,所以當取不到上頁的鏈接時,我們做一下處理:
if (document.referrer === '') {
// 沒有來源頁面信息的時候,改成首頁URL地址
$('.demo').attr('href', '/');
}
二. 哪些場景下無法獲得上一頁referrer信息
1、直接在瀏覽器地址欄中輸入地址;
2、使用location.reload()
刷新(location.href
或者location.replace()
刷新有信息);
3、在微信對話框中,點擊鏈接進入微信自身的瀏覽器;
4、掃碼進入QQ或者微信的瀏覽器;
5、直接新窗口打開一個頁面;
6、從https的網站直接進入一個http協議的網站(Chrome下親測);
7、a
標籤設置rel="noreferrer"
(兼容IE7+);
8、meta
標籤來控制不讓瀏覽器發送referer;