javascript操作referer

5616 ワード

Referrerの重要性
HTTP要求にはrefererのヘッダがあり、現在のフローのソース参照ページを指定します.例えば、wwww.sina.com.cn/sports/上でリンクをクリックしてcctv.comトップページに到達すれば、referrerはwww.sina.com.cn/sports/です.Javascriptでは、同じ情報をDcument.referrerで取得できます.この情報を通じて、訪問者がどのようなルートで現在のページに来ているかが分かります.これはWeb Analyticsにとって非常に重要であり、これは異なるチャネルによってもたらされるトラフィックの分布状況やユーザー検索のキーワードなどを教えてくれます.このreferrer情報を分析して得られます.
しかし、様々な理由から、Javascriptで読んだreferrerは空の文字列であることがあります.どのような場合にreferrerを失うかをまとめます.
Locationオブジェクトを変更してページナビゲーションを行います.
Locationオブジェクトは、ページナビゲーションのための非常に実用的なオブジェクトです.彼はあなたがUrlの一部だけを変更することを許可したからです.例えばcnドメイン名からcomドメイン名に切り替えると、他の部分は変わらない:
window.location.hostname = "example.com";
しかし、Locationを修正してページナビゲーションを行う方法は、IEの下でReferrerを失うことになります.
IE 5.5+バック空文字列
Chrome 3.0+、Firefox 3.5、Opera 9.6、Safari 3.2.2はいずれも正常にソースページに戻ります.
window.open方式で新しいウィンドウを開きます.
例:
<a href="#" onclick="window.open('http://www.google.com')">  Google</a>
このリンクをクリックすると、新しいウィンドウでGoogleサイトを開きます.アドレスバーに以下のjsコードを入力すれば、送信されたreferrerが見られます.
javascript:alert(document.referrer)
テスト結果:
IE 5.5+バック空文字列
Chrome 3.0+、Firefox 3.5、Opera 9.6、Safari 3.2.2はいずれも正常にソースページに戻ります.
同じドメイン名の下でこの方式でジャンプしたら、windoww.openerオブジェクトを訪問して損失したreferrer情報を得ることができます.コードは以下の通りです

<script type="text/javascript">
    var referrer = document.referrer;
    if (!referrer) {
        try {
            if (window.opener) {
                // IE            
                // Safari Chrome window.opener.location      
                referrer = window.opener.location.href;
            }
        } 
        catch (e) {}
    }
</script>
国境を越えたらしょうがないです.
マウスをドラッグして新しいウィンドウを開きます.
マウスドラッグは今非常に人気のあるユーザーの習慣で、多くのブラウザが内蔵されています.またはプラグインでマウスのドラッグ操作をサポートしています.しかし、このように開いているページは、ほとんどすべてreferrerを失っています.そして、この場合、window.openerを使って、失ったreferrerを取得することもできなくなりました.
テスト済み:
Maxthon 2.5.2、FirefoxのFireGestureプラグイン、Chrome 3.0+、Opera 9.6、Safari 3.2.
Flash内部リンクをクリックしてください.
Flashをクリックして別のサイトに行くと、Referrerの状況が乱雑になります.
IEの下で、クライアントJavascriptのdocument.referrerによって読み取られた値は空ですが、もし流量監視ソフトを使ってみたら、実際にHTTP要求のRefererヘッダは価値があり、これはIEによって実現されたBugかもしれません.また、この値はFlashファイルのアドレスを指しています.ソースページのアドレスではありません.
Chrome 4.0でFlashをクリックして新しいウィンドウに到着した後、ReferrerもFlashファイルのアドレスを指しています.ソースページのアドレスではありません.
Chrome 3.0はSafari 3.2と同じで、Referrer情報が失われます.
OperaはFirefoxと同じで、Referrerの値はソースのウェブサイトのアドレスです.
HTTPSはHTTPにジャンプします
HTTPSのサイトからHTTPのサイトにジャンプした場合、ブラウザはreferrerを送信しません.この各ブラウザの行動は同じです.
例えば、私たちはHTTPSでGoogle ReaderまたはGmailを使う時、あるリンクをクリックして別のサイトに行くと、技術的にはこのようなアクセスとユーザーが直接にURLを入力してアクセスするのは同じです.
Referrerが紛失した広告流量監視に対する影響
Referrerが無くなれば、Web Analyticsは重要な情報の一部を失います.特に広告の流れについては、実際のソースが分かりません.現在、国内の多くはGoogle Adsense広告のウェブサイトを使って、すべてwindow.openの方式を使って広告のリンクを開けて、だからIEの下でReferrerを失うことができて、私達はIEが現在の市場シェアの最大のブラウザーなことを知っていて、その影響はとても大きいです.多くの流量統計ツールはこの部分の流量を「直接流量」に分類し、ユーザーが直接URLを入力するのと等価です.
このような場合には、広告発信者が広告を出す際に、着陸ページのUrlに特定の追跡パラメータを加える必要がある.
例えば、あるFlash広告はクリックしてから到着するURLです.http://www.example.com/この流量を監視するためにどのルートから来たのですか?私達はこれを修正して着陸することができます.http://www.example.com/?src=sinaこのようにして、着陸ページでJavascriptコードを使用してこのsrcパラメータを抽出します.これで広告のソース情報が得られます.
Google Adwordsを投入すると、バックグラウンドシステムには「自動マーカー」というオプションがあります.このオプションを有効にすると、Googleはすべての広告の着陸ページUrlを生成すると、自動的にgclidのパラメータを追加します.このパラメータはGoogle Analyticsの後方とAdwords広告のバックのデータを統合することができます.広告の流れはどの広告シリーズに対応していますか?どの広告源や広告キーワードなどの情報がありますか?上に述べた考え方と実は似ています.Googleが自動的にギャルの修正をしてくれただけです.
IEの下でrefererは暇な解決方法です.
IEの下でwindow.locations.href方式でジャンプすると、referer値は空です.ラベルの中でジャンプするとrefererが空にならないです.この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;
     }
 }
ブラウザがリンクにアクセスする時は、refererを持たないでください.
私たちは一つのサイトからリンクをクリックして別のページに入ると、ブラウザはheaderリガでReferer値を表示します.しかし、このような表示はユーザーのプライバシーを漏らす可能性があります.他の人に私がどこからクリックしたのかを知らせたくない場合があります.ブラウザにRefererを送らないようにする手段がありますか?
  • 新規httml 5のソリューションを使用して、rel="noreferrer"を使用して、接続の属性はノレフェrrerであると宣言しました.現在はchrome 4+サポートのみです.
  • は中間ページを使用していますが、実際にはまだreferrerを送信しています.例えば、Googleの接続ステアリングを使用して、noreferrer.js.
  • .javascriptプロトコルリンクを使用して中継し、以下の説明を参照してください.
    新しいウィンドウを開くと、target="u blank"に相当します.
    
    function open_window(link){ 
        var arg = '\u003cscript\u003elocation.replace("'+link+'")\u003c/script\u003e';
        window.open('javascript:window.name;', arg);
    }
    
    接続に移行すると、target="u 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);
    }
    
    その他の接続