搜尋
首頁web前端js教程javascript操作referer詳細解析_javascript技巧

Referrer的重要性
HTTP請求中有一個referer的封包頭,用來指明目前流量的來源參考頁。例如在www.sina.com.cn/sports/上點選一個連結到達cctv.com首頁,那麼就referrer就是www.sina.com.cn/sports/了。在Javascript中,我們可以透過document.referrer來取得相同的資訊。透過這個訊息,我們就可以知道訪客是從什麼管道來到目前的頁面。這對於Web Analytics來說,是非常重要的,這可以告訴我們不同管道帶來的流量的分佈情況,還有用戶搜尋的關鍵字等,都是透過分析這個referrer資訊來獲得的。

但是,出於各種各樣的原因,有時候Javascript中讀到的referrer卻是空字串。下面總結一下哪些情況下會遺失referrer。

修改Location物件進行頁面導覽
Location物件是一個用於頁面導航的非常實用的物件。因為他允許你只變更Url的其中一部分。例如從cn域名切換到com域名,其他部分不變:

複製代碼 代碼如下:

window.location.hostname = "example.com";

但是,透過修改Location進行頁面導航的方法,會導致在IE下丟失Referrer。

IE5.5 下回傳空字串

Chrome3.0 ,Firefox3.5,Opera9.6,Safari3.2.2皆正常回傳來源網頁

window.open方式開啟新視窗
範例:

複製程式碼


複製程式碼

複製程式碼複製程式碼

複製程式碼

複製程式碼

程式碼如下:


訪問Google

複製程式碼


程式碼如下:


javascript:alert().ref 🎜>
測試結果:

IE5.5 下回傳空字串

Chrome3.0 ,Firefox3.5,Opera9.6,Safari3.2.2皆正常回傳來源網頁

如果是同個網域下透過此方式跳轉的,那麼我們可以透過存取windoww.opener物件去取得遺失的referrer資訊。程式碼如下:

複製程式碼 程式碼如下:
跨域的話則沒轍了~

滑鼠拖曳開啟新視窗
滑鼠拖曳是現在非常流行的使用者習慣,許多瀏覽器都內建或可以透過外掛程式的方式來支援滑鼠拖曳式瀏覽。但是透過這種方式開啟的頁面,基本全都遺失referrer。而且,在這種情況下,也無法使用window.opener的方式去取得遺失的referrer了。

已測:

Maxthon2.5.2,Firefox的FireGesture插件,Chrome3.0 ,Opera9.6,Safari3.2。

點選Flash內部連結
點選Flash上​​到達另外一個網站的時候,Referrer的情況就比較雜亂了。

IE下,透過客戶端Javascript的document.referrer讀取到的值是空的,但是如果你使用流量監控軟體看一下的話,你會發現,實際上HTTP請求中的Referer報文頭卻是有值的,這可能是IE實現的Bug。同時,這個值指向的是Flash檔案的位址,而不是來源網頁的位址。

Chrome4.0下點擊Flash到達新視窗之後,Referrer也是指向的Flash檔案的位址,而不是來源網頁的位址。

Chrome3.0和Safari3.2是一樣的,都是會遺失Referrer訊息。

Opera則和Firefox一樣,Referrer的值都是來源網頁的位址。

HTTPS跳到HTTP
從HTTPS的網站跳到HTTP的網站時,瀏覽器是不會發送referrer的。這個各大瀏覽器的行為是一樣的。

例如,我們在HTTPS下使用Google Reader或是Gmail的時候,點擊某個連結到另一個網站,那麼從技術上來說,這樣的存取和使用者直接鍵入網址存取是沒有什麼分別的。

Referrer遺失對於廣告流量監控的影響
Referrer如果遺失,Web Analytics就會丟掉很重要的部分資訊了,特別對於廣告流量來說,就無法知道實際來源了。目前國內好多用了Google Adsense廣告的網站,都使用了window.open的方式來打開廣告鏈接,因此IE下會丟失Referrer,而我們知道,IE是目前市場份額最大的瀏覽器,因此其影響是很大的。許多流量統計工具會因此將這部分流量歸入“直接流量”,和使用者直接鍵入網址等價了。

對於這樣的情況,需要讓廣告投放者在投放廣告的時候,給著陸頁面的Url加上特定的追蹤參數。

例如,某個Flash廣告,點擊之後到達的網址是http://www.example.com/,為了監控此流量是從哪個渠道過來的,我們可以修改此投放的著陸Url,改成http ://www.example.com/?src=sina,類似這種方式,然後在著陸頁面中使用Javascript程式碼提取此src參數,這樣就可以得到廣告來源資訊。

在投放Google Adwords的時候,後台系統有一個「自動標記」的選項,當啟用此選項的時候,Google在產生所有廣告的登陸頁面Url的時候,就會自動加上一個gclid的參數,這個參數能夠將Google Analytics後台和Adwords廣告後台的資料進行整合。這樣就可以知道廣告流量對應哪個廣告活動,哪個廣告來源和廣告關鍵字等資訊了。和上面提到的思路其實是類似的。只不過Google自動幫你做了Url的修改了而已。

IE下referer為空的解決方法
在IE下採用 window.location.href方式跳轉的話,referer值為空。而在標籤裡面的跳轉的話 referer就不會空。所以,透過以下程式碼就可以解決這個IE問題

複製程式碼 程式碼如下:

function gotoUrl(url){
     if(window.VBArray){
         var gotoLink = document.createElement('a');          gotoLink .click();
     }else{
       window.location.href = url ;
禁止瀏覽器在訪問連結時不要帶上referer
我們在從一個網站點擊連結進入另一個頁面時,瀏覽器會在header裡加上Referer值,來識別這次造訪的來源頁面。但是這種標識有可能會洩漏用戶的隱私,有時候我不想讓其他人知道我是從哪裡點擊進來的,能否有手段可以讓瀏覽器不要發送Referer呢?

•使用新增的html5的解決方案,使用rel="noreferrer",聲明連接的屬性為noreferrer,目前只有chrome4 支援.
•使用中間頁面,但實際上還是發送referrer的,例如使用Google的連線轉向,noreferrer.js.
•使用javascript協定連結中轉,參考下面的說明.

新開一個窗口,相當於target="_blank":

複製代碼 代碼如下:

function open_window(link){ 
    var arg = 'u003cscriptu003elocation.replace("' link '")u003c/scriptu003e';
 ;
}


轉向到一個連接,相當於target="_self":
複製代碼 代碼如下:

function redirect(link){ 
    var arg ='u003cscriptu003etop.lolink.place( ';
    var iframe = document.createElement('iframe');
    iframe.src='javascript:window.name;'; }



陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
JavaScript數據類型:瀏覽器和nodejs之間是否有區別?JavaScript數據類型:瀏覽器和nodejs之間是否有區別?May 14, 2025 am 12:15 AM

JavaScript核心數據類型在瀏覽器和Node.js中一致,但處理方式和額外類型有所不同。 1)全局對像在瀏覽器中為window,在Node.js中為global。 2)Node.js獨有Buffer對象,用於處理二進制數據。 3)性能和時間處理在兩者間也有差異,需根據環境調整代碼。

JavaScript評論:使用//和 / * * / * / * /JavaScript評論:使用//和 / * * / * / * /May 13, 2025 pm 03:49 PM

JavaScriptusestwotypesofcomments:single-line(//)andmulti-line(//).1)Use//forquicknotesorsingle-lineexplanations.2)Use//forlongerexplanationsorcommentingoutblocksofcode.Commentsshouldexplainthe'why',notthe'what',andbeplacedabovetherelevantcodeforclari

Python vs. JavaScript:開發人員的比較分析Python vs. JavaScript:開發人員的比較分析May 09, 2025 am 12:22 AM

Python和JavaScript的主要區別在於類型系統和應用場景。 1.Python使用動態類型,適合科學計算和數據分析。 2.JavaScript採用弱類型,廣泛用於前端和全棧開發。兩者在異步編程和性能優化上各有優勢,選擇時應根據項目需求決定。

Python vs. JavaScript:選擇合適的工具Python vs. JavaScript:選擇合適的工具May 08, 2025 am 12:10 AM

選擇Python還是JavaScript取決於項目類型:1)數據科學和自動化任務選擇Python;2)前端和全棧開發選擇JavaScript。 Python因其在數據處理和自動化方面的強大庫而備受青睞,而JavaScript則因其在網頁交互和全棧開發中的優勢而不可或缺。

Python和JavaScript:了解每個的優勢Python和JavaScript:了解每個的優勢May 06, 2025 am 12:15 AM

Python和JavaScript各有優勢,選擇取決於項目需求和個人偏好。 1.Python易學,語法簡潔,適用於數據科學和後端開發,但執行速度較慢。 2.JavaScript在前端開發中無處不在,異步編程能力強,Node.js使其適用於全棧開發,但語法可能複雜且易出錯。

JavaScript的核心:它是在C還是C上構建的?JavaScript的核心:它是在C還是C上構建的?May 05, 2025 am 12:07 AM

javascriptisnotbuiltoncorc; sanInterpretedlanguagethatrunsonenginesoftenwritteninc.1)JavascriptwasdesignedAsignedAsalightWeight,drackendedlanguageforwebbrowsers.2)Enginesevolvedfromsimpleterterpretpretpretpretpreterterpretpretpretpretpretpretpretpretpretcompilerers,典型地,替代品。

JavaScript應用程序:從前端到後端JavaScript應用程序:從前端到後端May 04, 2025 am 12:12 AM

JavaScript可用於前端和後端開發。前端通過DOM操作增強用戶體驗,後端通過Node.js處理服務器任務。 1.前端示例:改變網頁文本內容。 2.後端示例:創建Node.js服務器。

Python vs. JavaScript:您應該學到哪種語言?Python vs. JavaScript:您應該學到哪種語言?May 03, 2025 am 12:10 AM

選擇Python還是JavaScript應基於職業發展、學習曲線和生態系統:1)職業發展:Python適合數據科學和後端開發,JavaScript適合前端和全棧開發。 2)學習曲線:Python語法簡潔,適合初學者;JavaScript語法靈活。 3)生態系統:Python有豐富的科學計算庫,JavaScript有強大的前端框架。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具