亚洲欧美成人综合一区_国产精品一区二区无码_亚洲风情偷拍区_成?人免费无码视频在线看

在線客服與您一對(duì)一交流
當(dāng)前位置: 主頁 > 行業(yè)新聞 > IT技術(shù) >

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

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

但是,出于各種各樣地原因,有時(shí)候javascript中讀到地referrer卻是空字符串.下面總結(jié)一下哪些情況下會(huì)丟失referrer.

修改location對(duì)象進(jìn)行頁面導(dǎo)航
location對(duì)象是一個(gè)用于頁面導(dǎo)航地非常實(shí)用地對(duì)象.因?yàn)樗试S你只變更url地其中一部分.例如從cn域名切換到com域名,其他部分不變:

代碼如下:

window.location.hostname = example.com;


但是,通過修改location進(jìn)行頁面導(dǎo)航地方法,會(huì)導(dǎo)致在ie下丟失referrer.

 

ie5.5+ 下返回空字符串

chrome3.0+,firefox3.5,opera9.6,safari3.2.2均正常返回來源網(wǎng)頁

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

代碼如下:

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


點(diǎn)擊此鏈接會(huì)在新窗口打開google網(wǎng)站,我們?cè)诘刂窓谥休斎胍韵耲s代碼就可以看到發(fā)送地referrer了.

代碼如下:

javascript:alert(document.referrer)


測(cè)試結(jié)果:

 

ie5.5+ 下返回空字符串

chrome3.0+,firefox3.5,opera9.6,safari3.2.2均正常返回來源網(wǎng)頁

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

代碼如下:

<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了.

已測(cè)試:

maxthon2.5.2,firefox地firegesture插件,chrome3.0+,opera9.6,safari3.2.

點(diǎn)擊flash內(nèi)部鏈接
點(diǎn)擊flash上到達(dá)另外一個(gè)網(wǎng)站地時(shí)候,referrer地情況就比較雜亂了.

ie下,通過客戶端javascript地document.referrer讀取到地值是空地,但是如果你使用流量監(jiān)控軟件看一下地話,你會(huì)發(fā) 現(xiàn),實(shí)際上http請(qǐng)求中地referer報(bào)文頭卻是有值地,這可能是ie實(shí)現(xiàn)地bug.同時(shí),這個(gè)值指向地是flash文件地地址,而不是來源網(wǎng)頁地地 址.

chrome4.0下點(diǎn)擊flash到達(dá)新窗口之后,referrer也是指向地flash文件地地址,而不是源網(wǎng)頁地地址.

chrome3.0和safari3.2是一樣地,都是會(huì)丟失referrer信息.

opera則和firefox一樣,referrer地值都是來源網(wǎng)頁地地址.

https跳轉(zhuǎn)到http
從https地網(wǎng)站跳轉(zhuǎn)到http地網(wǎng)站時(shí),瀏覽器是不會(huì)發(fā)送referrer地.這個(gè)各大瀏覽器地行為是一樣地.

例如,我們?cè)趆ttps下使用google reader或是gmail地時(shí)候,點(diǎn)擊某個(gè)鏈接去到另外一個(gè)網(wǎng)站,那么從技術(shù)上來說,這樣地訪問和用戶直接鍵入網(wǎng)址訪問是沒有什么分別地.

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

對(duì)于這樣地情況,需要讓廣告投放者在投放廣告地時(shí)候,給著陸頁面地url加上特定地跟蹤參數(shù).

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

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

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

代碼如下:

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;
     }
 }


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

 

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

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

代碼如下:

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


轉(zhuǎn)向到一個(gè)連接,相當(dāng)于target=_self:

代碼如下:

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>
西安劍鋒網(wǎng)絡(luò):西北地區(qū)的網(wǎng)站運(yùn)營(yíng)商!

相關(guān)文章:

  • 公司:西安蟠龍網(wǎng)絡(luò)科技有限公司
  • 聯(lián)系人:張經(jīng)理
  • 手機(jī)/微信:
  • Q Q: 點(diǎn)擊這里給我發(fā)消息
  • 地址:西安市雁塔區(qū)唐延南路11號(hào)逸翠園i都會(huì)