javascript操作refereer詳細解析


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のサイトから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」を使用して、ステートメント接続の属性はnoreferrerで、現在は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);
}
</CODE>
は接続に転向して、taget="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);
}
</CODE>