しばらく前に、JavaScriptを介してページのソースを取得する必要がありました。この操作は非常に簡単です。 document.referrerを使用して入手できます。ただし、実際のアプリケーションにはまだ多くの予期しない状況があるため、ここで簡単に並べ替えましょう。
私が遭遇した最初の問題は、HTTPSページからHTTPページに移動した後、document.referrerの値が空であることです。セキュリティ上の理由から、多くのWebサイト(Taobaoのログインページなど)のいくつかの重要なページはHTTPSプロトコルを使用しています。ページA(httpページ)のページB(httpページ)へのリンクをクリックしてログインしていないユーザーが(httpページ)が、ユーザーがログインする必要があるため、ログインページ(httpsページ)にジャンプしてから、ログイン後にb(httpページ)にジャンプします。リファラー、パスにHTTPページとHTTPSページがある場合、パスはHTTPSからHTTPに分割されます。
この問題のルートはブラウザのセキュリティポリシーであり、JavaScriptだけに依存する特に良い解決策はないようです。ラウンドアバウトのアイデアは、window.nameを使用して、現在のページのURLをwindow.nameにhttpsページに書き込み、次のページ(httpページ)で読み取ります。
この状況に加えて、document.referrerを他のページをジャンプして通常取得できますか?私は検索し、誰かがここにリストを編集したことを発見しましたが、それはあまり完全ではありません。たとえば、IE6の場合は含まれていません。だから私はそれを自分でやり、仮想マシンにnブラウザをインストールし、すべての状況をテストしました(実際には物理的な仕事でした)。結果は以下の表に示されています。
| 動作します | IE6 | IE7 | IE8 | IE9 | Firefox | クロム | オペラ | サファリ |
|---|---|---|---|---|---|---|---|---|
| アドレスバーにURLを直接入力します | "" | "" | "" | "" | "" | "" | "" | "" |
| ブックマークからURLにアクセスします | "" | "" | "" | "" | "" | "" | "" | "" |
| ページAからハイパーリンクをクリックして、ページBにジャンプします(ターゲット=” _セルフ”) | √ | √ | √ | √ | √ | √ | √ | √ |
| ページAからハイパーリンクをクリックして、ページBにジャンプします(ターゲット=” _ブランク”) | √ | √ | √ | √ | √ | √ | √ | √ |
| 新しいタブでページAからハイパーリンクを右クリックし、ページBを開いてください | - | √ | √ | √ | √ | √ | √ | "" |
| 新しいウィンドウでページAと開いたページBからハイパーリンクを右クリックします | √ | √ | √ | √ | √ | √ | √ | "" |
| リンクをアドレスバーにドラッグします | "" | ドラッグできません | ドラッグできません | "" | "" | "" | "" | "" |
| リンクをタブバーにドラッグします | - | "" | "" | "" | "" | "" | "" | "" |
| ブラウザのフォワードボタンとバックボタンを使用します | √ | √ | √ | √ | √ | √ | √ | √ |
| JS Modify location.href | "" | "" | "" | √ | √ | √ | √ | √ |
| JSはwindow.openを使用します | "" | "" | "" | "" | √ | √ | √ | √ |
| サーバーリダイレクト(302ジャンプ) | 前のページをターゲットにします | 前のページをターゲットにします | 前のページをターゲットにします | 前のページをターゲットにします | 前のページをターゲットにします | 前のページをターゲットにします | 前のページをターゲットにします | 前のページをターゲットにします |
| ページメタリフレッシュ | "" | "" | "" | "" | "" | ターニングページ | ターニングページ | ターニングページ |
上記の表の「√」は、リファラーを正常に取得できることを意味します。
IEを除き、他のブラウザは公式Webサイトにダウンロードできる最新のバージョンです。その中で、SafariはWindowsバージョンとMacバージョンの両方をテストしましたが、結論は同じです。
また、フラッシュをクリックしてジャンプするときに各ブラウザの下でリファラーを維持できるかどうかなど、テストが行われていない場合もあります。
上記の表のほとんどの状況は期待に沿っていますが、注意を払うべきことがいくつかあるようです。
1. Safariでは、右クリックしてリンクを開くと、紹介者が失われます。
2。IEでは、location.hrefを変更するか、window.openを使用してページを開くとリファラーが失われます(location.hrefを使用してジャンプしてもリファラーを失うことはありません)。
3.メタジャンプを使用すると、IE/Firefoxの下でリファラーが失われます。
最後に、簡単な結論は、Document.Referrer Collectionページを介してソースにアクセスする必要がある場合、JSを使用して新しいウィンドウをジャンプまたは開いたり、メタを使用してジャンプしたりしないことをお勧めします。