ホームページ > 記事 > ウェブフロントエンド > JavaScriptのDocument.referrerの各種ブラウザでのテスト結果_基礎知識
少し前までは、JavaScript を通じてページのソースを取得する必要がありましたが、この操作は document.referrer を使用することで非常に簡単に取得できます。ただし、実際のアプリケーションでは予期せぬ状況が依然として多く存在します。ここで簡単に要約します。
最初に発生する問題は、HTTPS ページから HTTP ページに切り替えた後、document.referrer の値が空であることです。セキュリティ上の理由から、多くの Web サイトの一部の重要なページ (淘宝網のログイン ページなど) では HTTPS プロトコルが使用されます。ログインしていないユーザーがページ A (HTTP ページ) 上のページ B (HTTP ページ) へのリンクをクリックしたが、ページ B ではユーザーのログインが必要な場合、最初にログイン ページ (HTTPS ページ) にジャンプします。ログインが完了したら B (HTTP ページ) に戻ると、ページ B では document.referrer を取得できないことがわかります。つまり、リファラーに基づいてユーザー アクセス パスを復元する場合、パス内に HTTP ページと HTTPS ページが存在すると、パスは HTTPS から HTTP に切断されます。
この問題の根本的な原因はブラウザのセキュリティ ポリシーです。JavaScript だけを使用する特に良い解決策はないようです。回りくどいアイデアは、window.name を使用し、現在のページの URL を HTTPS ページの window.name に書き込み、それを次のページ (HTTP ページ) で読み取ることです。
この状況を除いて、他のページにジャンプした場合、document.referrerは正常に取得できますか?検索すると、ここ で誰かがリストをまとめているのを見つけましたが、それは包括的ではなく、たとえば、瀕死の IE6 は含まれていませんでした。そこで私は自分でそれを実行し、仮想マシンに N 個のブラウザをインストールし、さまざまな状況をテストしました (これは実際には物理的な作業です)。結果を以下の表に示します。
操作 | IE6 | IE7 | IE8 | IE9 | Firefox | Chrome | Opera | Safari |
---|---|---|---|---|---|---|---|---|
直接在地址栏输入URL | “” | “” | “” | “” | “” | “” | “” | “” |
从书签访问URL | “” | “” | “” | “” | “” | “” | “” | “” |
从页面A点击超链接,跳转到页面B(target=”_self”) | √ | √ | √ | √ | √ | √ | √ | √ |
从页面A点击超链接,跳转到页面B(target=”_blank”) | √ | √ | √ | √ | √ | √ | √ | √ |
从页面A右键单击超链接,在新标签页中打开页面B | - | √ | √ | √ | √ | √ | √ | “” |
从页面A右键单击超链接,在新窗口中打开页面B | √ | √ | √ | √ | √ | √ | √ | “” |
拖动链接到地址栏 | “” | 无法拖动 | 无法拖动 | “” | “” | “” | “” | “” |
拖动链接到标签栏 | - | “” | “” | “” | “” | “” | “” | “” |
使用浏览器的前进、后退按钮 | √ | √ | √ | √ | √ | √ | √ | √ |
JS 修改 location.href | “” | “” | “” | √ | √ | √ | √ | √ |
JS 使用 window.open | “” | “” | “” | “” | √ | √ | √ | √ |
服务器重定向(302跳转) | 定向之前的页面 | 定向之前的页面 | 定向之前的页面 | 定向之前的页面 | 定向之前的页面 | 定向之前的页面 | 定向之前的页面 | 定向之前的页面 |
页面 Meta Refresh | “” | “” | “” | “” | “” | 转向页 | 转向页 | 转向页 |
上記表中の「√」はリファラーが正常に取得できることを意味し、「」はリファラーが空であることを意味します。
IE を除く他のブラウザは、公式 Web サイトからダウンロードできる最新バージョンです。Safari は Windows 版と Mac 版の両方をテストしましたが、結論は同じです。
Flashをクリックしてジャンプする際に、各ブラウザでリファラーを維持できるかどうかなど、テストされていない状況もいくつかあります。
上の表の状況のほとんどは予想どおりですが、注意が必要な点がいくつかあるようです:
1. Safari で右クリックしてリンクを開くと、リファラーが失われます。
2. IE では、location.href を変更するか、window.open を使用してページを開くと、リファラーが失われます (IE 9 は例外で、location.href を使用してジャンプしてもリファラーは失われません)。
3. メタジャンプを使用すると、IE/Firefox ではリファラーが失われます。
最後に、簡単な結論は、document.referrer コレクション ページを通じてソースにアクセスする必要がある場合、JS を使用してジャンプしたり、新しいウィンドウを開いたり、メタを使用してジャンプしたりしないことが最善です。