ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScriptのDocument.referrerの各種ブラウザでのテスト結果_基礎知識

JavaScriptのDocument.referrerの各種ブラウザでのテスト結果_基礎知識

WBOY
WBOYオリジナル
2016-05-16 16:41:431379ブラウズ

少し前までは、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 を使用してジャンプしたり、新しいウィンドウを開いたり、メタを使用してジャンプしたりしないことが最善です。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。