ページがリクエストされるたびに、そのページのリファラーを取得します。他のサイトからのリファラーだけを追跡する必要があります。自分のサイト内のあるページから別のページへの移動を追跡したくありません。どうやってやるの?
5 に答える
document.referrer.indexOf(location.protocol + "//" + location.host) === 0;
もともとJavaScriptで投稿されました-私はリファラーですか?
誰かが初めて私たちのウェブサイトにアクセスしたとき、私たちはリファラーをクッキーに保存します。このように、彼らが私たちのデモをダウンロードした場合、私たちはクッキーから元のリファラーを取得することができ、どのサイトが私たちにつながるのに効果的であるかを学びます。
もちろん、訪問者が当社のWebサイトでヒットする後続のすべてのページには、リファラーが当社のWebサイトとして表示されます。私たちはそれらを望んでいません。これを回避するために最初に行ったのは、リファラーで「風上」というテキストを探し、そうであれば、それが私たちのサイトからのものであると想定することでした。これに伴う問題は、検索用語として、またはWindwardについて説明するURLの一部として、多くのリファラーURLにwindwardが含まれていることです。(これは朗報です。これは、私たちが今ではよく知られている製品であることを意味します。)
それで、私は最新のアプローチにたどり着きました。これはどのサイトでも機能し、同じサイトからのリファラーのみを拒否する必要があります。
function IsReferredFromMe()
{
var ref = document.referrer;
if ((ref == null) || (ref.length == 0)) {
return false;
}
if (ref.indexOf("http://") == 0) {
ref = ref.substring(7);
}
ref = ref.toLowerCase();
var myDomain = document.domain;
if ((myDomain == null) || (myDomain.length == 0)) {
return false;
}
if (myDomain.indexOf("http://") == 0) {
myDomain = myDomain.substring(7);
}
myDomain = myDomain.toLowerCase();
return ref.indexOf(myDomain) == 0;
}
提示されたソリューションは、Webサイトにサブドメインがない場合に機能します。サブドメインが存在する場合は、ドメイン自体の直前に、提示されたサブドメインがあるかどうかを確認する必要があります。
document.referrer.replace("http://", '').replace("https://", '').split('/')[0].match(new RegExp(".*" +location.host.replace("www.", '')))
このソリューションでは、ドメインの前に。*を追加して、サブドメインが同じドメインからのものであることを検出します。
「同じウェブサイト」のページが同じ出所(同じプロトコル、ホスト、ポート)であると思われる場合、
このように確認してください:
function the_referrer_has_the_same_origin() {
try {
const referrer = new URL(document.referrer);
return (referrer.origin === location.origin);
} catch(invalid_url_error) {
return false;
}
}
// Works as intended for `https://www.google.com` and `https://www.google.com:443`.
。
短いものが必要で、ありそうもない状況を考慮しない場合は、次のことを試してください。
document.referrer.startsWith(location.origin)
// Fails for `https://www.google.com` and `https://www.google.com:443`.
。
document.referrer.includes(location.host);