欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

javascript操作referer詳細(xì)解析

 更新時間:2014年03月10日 08:48:44   作者:  
本篇文章主要是對javascript操作referer進(jìn)行了詳細(xì)的介紹,需要的朋友可以過來參考下,希望對大家有所幫助

Referrer的重要性
HTTP請求中有一個referer的報文頭,用來指明當(dāng)前流量的來源參考頁。例如在www.sina.com.cn/sports/上點擊一個鏈接到達(dá)cctv.com首頁,那么就referrer就是www.sina.com.cn/sports/了。在Javascript中,我們可以通過document.referrer來獲取同樣的信息。通過這個信息,我們就可以知道訪客是從什么渠道來到當(dāng)前頁面的。這對于Web Analytics來說,是非常重要的,這可以告訴我們不同渠道帶來的流量的分布情況,還有用戶搜索的關(guān)鍵詞等,都是通過分析這個referrer信息來獲取的。

但是,出于各種各樣的原因,有時候Javascript中讀到的referrer卻是空字符串。下面總結(jié)一下哪些情況下會丟失referrer。

修改Location對象進(jìn)行頁面導(dǎo)航
Location對象是一個用于頁面導(dǎo)航的非常實用的對象。因為他允許你只變更Url的其中一部分。例如從cn域名切換到com域名,其他部分不變:

復(fù)制代碼 代碼如下:

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

但是,通過修改Location進(jìn)行頁面導(dǎo)航的方法,會導(dǎo)致在IE下丟失Referrer。

IE5.5+ 下返回空字符串

Chrome3.0+,F(xiàn)irefox3.5,Opera9.6,Safari3.2.2均正常返回來源網(wǎng)頁

window.open方式打開新窗口
示例:

復(fù)制代碼 代碼如下:

<a href="#" onclick="window.open('http://www.google.com')">訪問Google</a>

點擊此鏈接會在新窗口打開Google網(wǎng)站,我們在地址欄中輸入以下js代碼就可以看到發(fā)送的referrer了。
復(fù)制代碼 代碼如下:

javascript:alert(document.referrer)

測試結(jié)果:

IE5.5+ 下返回空字符串

Chrome3.0+,F(xiàn)irefox3.5,Opera9.6,Safari3.2.2均正常返回來源網(wǎng)頁

如果是同個域名下通過此方式跳轉(zhuǎn)的,那么我們可以通過訪問windoww.opener對象去獲取丟失的referrer信息。代碼如下:

復(fù)制代碼 代碼如下:

<script type="text/javascript">
    var referrer = document.referrer;
    if (!referrer) {
        try {
            if (window.opener) {
                // IE下如果跨域則拋出權(quán)限異常
                // Safari和Chrome下window.opener.location沒有任何屬性
                referrer = window.opener.location.href;
            }
        } 
        catch (e) {}
    }
</script>

跨域的話則沒轍了~

鼠標(biāo)拖拽打開新窗口
鼠標(biāo)拖拽是現(xiàn)在非常流行的用戶習(xí)慣,很多瀏覽器都內(nèi)置或者可以通過插件的方式來支持鼠標(biāo)拖拽式瀏覽。但是通過這種方式打開的頁面,基本全都丟失referrer。并且,這種情況下,也無法使用window.opener的方式去獲取丟失的referrer了。

已測試:

Maxthon2.5.2,F(xiàn)irefox的FireGesture插件,Chrome3.0+,Opera9.6,Safari3.2。

點擊Flash內(nèi)部鏈接
點擊Flash上到達(dá)另外一個網(wǎng)站的時候,Referrer的情況就比較雜亂了。

IE下,通過客戶端Javascript的document.referrer讀取到的值是空的,但是如果你使用流量監(jiān)控軟件看一下的話,你會發(fā)現(xiàn),實際上HTTP請求中的Referer報文頭卻是有值的,這可能是IE實現(xiàn)的Bug。同時,這個值指向的是Flash文件的地址,而不是來源網(wǎng)頁的地址。

Chrome4.0下點擊Flash到達(dá)新窗口之后,Referrer也是指向的Flash文件的地址,而不是源網(wǎng)頁的地址。

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

Opera則和Firefox一樣,Referrer的值都是來源網(wǎng)頁的地址。

HTTPS跳轉(zhuǎn)到HTTP
從HTTPS的網(wǎng)站跳轉(zhuǎn)到HTTP的網(wǎng)站時,瀏覽器是不會發(fā)送referrer的。這個各大瀏覽器的行為是一樣的。

例如,我們在HTTPS下使用Google Reader或是Gmail的時候,點擊某個鏈接去到另外一個網(wǎng)站,那么從技術(shù)上來說,這樣的訪問和用戶直接鍵入網(wǎng)址訪問是沒有什么分別的。

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

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

例如,某個Flash廣告,點擊之后到達(dá)的網(wǎng)址是http://www.example.com/,為了監(jiān)控此流量是從哪個渠道過來的,我們可以修改此投放的著陸Url,改成http://www.example.com/?src=sina,類似這種方式,然后在著陸頁面中使用Javascript代碼提取此src參數(shù),這樣就可以得到廣告來源信息。

在投放Google Adwords的時候,后臺系統(tǒng)有一個“自動標(biāo)記”的選項,當(dāng)啟用此選項的時候,Google在生成所有廣告的著陸頁面Url的時候,就會自動加上一個gclid的參數(shù),這個參數(shù)能夠?qū)oogle Analytics后臺和Adwords廣告后臺的數(shù)據(jù)進(jìn)行整合。這樣就可以知道廣告流量對應(yīng)于哪個廣告系列,哪個廣告來源和廣告關(guān)鍵詞等信息了。和上面提到的思路其實是類似的。只不過Google自動幫你做了Url的修改了而已。

IE下referer為空的解決辦法
在IE下采用 window.location.href方式跳轉(zhuǎn)的話,referer值為空。而在標(biāo)簽里面的跳轉(zhuǎn)的話 referer就不會空。所以,通過以下代碼就可以解決這個IE問題

復(fù)制代碼 代碼如下:

function gotoUrl(url){
     if(window.VBArray){
         var gotoLink = document.createElement('a');
         gotoLink .href = url;
         document.body.appendChild(gotoLink);
         gotoLink .click();
     }else{
       window.location.href = url;
     }
 }

禁止瀏覽器在訪問鏈接時不要帶上referer
我們在從一個網(wǎng)站點擊鏈接進(jìn)入另一個頁面時,瀏覽器會在header里加上Referer值,來標(biāo)識這次訪問的來源頁面。但是這種標(biāo)識有可能會泄漏用戶的隱私,有時候我不想讓其他人知道我是從哪里點擊進(jìn)來的,能否有手段可以讓瀏覽器不要發(fā)送Referer呢?

•使用新增的html5的解決方案,使用rel="noreferrer",聲明連接的屬性為noreferrer,目前只有chrome4+支持.
•使用中間頁面,但實際上還是發(fā)送referrer的,比如使用Google的連接轉(zhuǎn)向,noreferrer.js.
•使用javascript協(xié)議鏈接中轉(zhuǎn),參見下面的說明.

新開一個窗口,相當(dāng)于target="_blank":

復(fù)制代碼 代碼如下:

function open_window(link){ 
    var arg = '\u003cscript\u003elocation.replace("'+link+'")\u003c/script\u003e';
    window.open('javascript:window.name;', arg);
}
</CODE>

轉(zhuǎn)向到一個連接,相當(dāng)于target="_self":
復(fù)制代碼 代碼如下:

function redirect(link){ 
    var arg ='\u003cscript\u003etop.location.replace("'+link+'")\u003c/script\u003e';
    var iframe = document.createElement('iframe');
    iframe.src='javascript:window.name;';
    iframe.name=arg;
    document.body.appendChild(iframe);
}
</CODE>

相關(guān)文章

最新評論