移動端返回上一頁,剛需!document.referrer 詳解

來源:互聯網
上載者:User

標籤:親測   ade   5.0   沒有   http   使用   var   字元   ever   

返回上一頁,在PC端我們可以使用:history.go(-1)或者history.back(),可以正常返回第一層。這樣,我們不需要上一頁的 url 具體是什麼,只要使用 history 一般都沒啥問題。

 

但是在移動端,如果想要返回上一頁。比如從A頁面跳到B頁面,如果B頁面想返回A頁面,為了防止不會跳錯,必須要有一個 <  按鈕,給它加 history.go(-1) ,返回上一層。

<a href="javascript:history.go(-1)" class="header-back jsBack">返回</a>

 

那如果我們沒有返回上一頁的 < 的按鈕,在手機上怎麼操作才會返回上一頁,比如:從分享進來的,進入的是內頁,此時,內頁就是第一頁,它沒有上一頁,要怎麼返回?這時點返回按鈕是沒有反應的,不是一個好的使用者體驗,十有八九的人會誤以為是BUG,這絕對是個坑爸的問題。

移動端無論是原生app還是傳統的網頁,返回上頁是一個比較強烈的需求。

 

javascript 有一個可以擷取前一頁面的URL地址的方法:document.referrer

document.referrer 的來源

  1. referrer 屬性可返回載入當前文檔的文檔的 URL【摘自W3CSHCOOL】, 如果當前文檔不是通過超連結訪問的,那麼當前文檔的URL為NULL,這個屬性允許用戶端的 javascript 訪問 HTTP 頭部;
  2. referrer 屬性,我們可以從 http 頭部擷取

document.referrer 的相容性

document.referrer IE7都支援,它的相容性比較高,Android 5.0開始支援,iOS都支援,PC端瀏覽器從IE7就開始支援了,相容性沒有什麼大的問題。

但是有個小小的問題,就是 IE 會主動清除 referref 屬性。在IE中用javascript做跳轉,比如用window.location.href = “”; google如果使用document.referrer無法取到瀏覽器請求的HTTP referrer,因為IE清空了。而其他主流瀏覽器Firefox和Chrome都會保留referrer,沒辦法,只好判斷,如果是IE瀏覽器,就主動給它增加一個 referrer 。這樣的原理就是給IE瀏覽器的頁面偷偷加了個連結,然後自動點這個連結,於是referrer就能保留了。

var url = ‘http://www.jb51.net‘;   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做法

解決移動端返回上一頁的問題,就是上面所說的分享的問題?根據【張鑫旭】大神的方法是,既然點擊上一頁沒有反應,就讓它返回首頁,從首頁再進入其它子頁面,應該沒啥問題。

  • 根據 document.referrer 的來源來判斷是否有來源資訊,如果沒有,則返回首頁:
if (typeof document.referrer === ‘‘) {    // 沒有來源頁面資訊的時候,改成首頁URL地址    $(‘.jsBack‘).attr(‘href‘, ‘/‘);}

這樣,當再次點擊返回按鈕時,就可以返回首頁了。

  • 根據 document.referrer 的來源url 是否為網站的 url,如果判斷這個 url 的來路有問題,則屏蔽該 url 下的所有資訊,比如不讓其顯示圖片等。可以有效防止盜鏈,目前百度統計,google ads統計,CNZZ統計,都是用的這個方法。

 

無法擷取 referrer 資訊的情況

下面的情境無法獲得 referrer 資訊,以下前8條屬於【張鑫旭】:

  1. 直接在瀏覽器中輸入地址
  2. 使用location.reload()重新整理(location.href或者location.replace()重新整理有資訊)
  3. 在對話方塊中,點擊進入自身瀏覽器
  4. 掃碼進入或QQ的瀏覽器
  5. 直接新視窗開啟一個頁面
  6. 從https的網站直接進入一個http協議的網站(Chrome下親測)
  7. a標籤設定rel="noreferrer"(相容IE7+)
  8. meta標籤來控制不讓瀏覽器發送referer
  9. 點擊 flash 內部連結
  10. Chrome4.0以下,IE 5.5+以下返回空的字串
  11. 使用 修改 Location 進行頁面導航的方法,會導致在IE下丟失 referrer,這可能是IE的一個BUG
  12. 跨域
  13. <meta content="never" name="referrer">

     

怎麼解決無法擷取 referrer 的情況,還沒有很好的方法,盡量避免吧。

移動端返回上一頁,剛需!document.referrer 詳解

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.