目次へ戻ります
イヌでもわかるJavaScript講座


ハイパーリンク元のURLを調べる

あいさつ文で「○×さん、おはよう」なんて表示できたら面白いかもしれませんが、さすがに相手の名前は特定できません。とりあえず、どこからリンクしてきたかは、わかります。リンク元がお友達であれば、「○×さんのホームページからお越しですね。ありがとうございます。」と表示してみても面白いかもしれません。
難易度:★★★☆☆☆☆☆☆☆
【実行例】

【リスト】
<SCRIPT language="JavaScript"><!--
if (document.referrer.length !=0 ){
   document.write(document.referrer+" からお越しですね!");
}else{
   document.write("直接このホームページへお越し下さってありがとうございます");
}
// --></SCRIPT>

サンプルだけのHTMLは こちらへ
【説明】

ハイパーリンク元を調べるには、document.referrer を使います。その中にリンク元のURLが入っています。リンク元がなければ(リンクせずに直接ホームページに入ったのであれば)、なにも入っていません。
【注意】IE3は document.referrer は対応していません。

リンク元があるかないかを調べるために、文字の長さ document.referrer.length で判断しました。リンク元がなければ文字(URL)が入っていないのですから 0 です。 0 ということはアドレスバーにURLを直接打ち込んだか、お気に入りに登録していたケースが考えられます。

document.referrer の内容 : 「
document.referrer.length の内容 : 「

この文字長がゼロでなければリンク元のURLを表示、ゼロであれば「直接ありがと」のメッセージを表示しました。

サンプルは、リンク元があればそのURLをそのまま表示しています。味気ないですね。
友達や知り合い等、リンク元がわかっているところは、if 文で置き換えてあげましょう。
if (document.referrer.length !=0 ){
  myRef = document.referrer;
  if (myRef == "http://www.red.oit-net.jp/tatsuya/java/index.htm"){
    myMsg = "イヌでもわかるJavaScript講座";
  }else{ // その他のサイトからリンクされてきた
    myMsg = myRef;
  }
  myMsg = myMsg + " からお越しですね!";
}else{   // お気に入りから来た?
  myMsg = "直接このホームページへお越し下さってありがとうございます";
}
document.write( myMsg );
Q&A

Q:「私のHPは index.html がトップページで、どうしてもこのページから入って欲しいのですが、index2.html から入ってくる人が大勢いるのです...そこで index2.html に直接入ってきたら、強制的に index.html へ飛ばしたいのですが」
A:下記のスクリプトを index2.html の <HEAD>タグの中に書き込んでください。 (保障しません)
<script language="JavaScript"><!--
myHome="http://www.provider.jp/yourHP/index.html";
if (document.referrer != myHome){ // リンク元がトップページじゃない
   location.href = myHome;        // トップページへジャンプ
}
// --></script>


Q:「特定のページ以外からサブページへリンクされた場合は、トップページへリンクしたいのですが…」
A:下記のスクリプトを サブページの <HEAD>タグの中に書き込んでください。 (保障しません)
<script language="JavaScript"><!--
myURL1="http://www.prov.jp/OK1/index.htm"; //リンク許可ページ1
myURL2="http://www.prov.jp/OK2/index.htm"; //リンク許可ページ2
myURL3="http://www.prov.jp/OK3/index.htm"; //リンク許可ページ3
myURL4="http://www.prov.jp/OK4/index.htm"; //リンク許可ページ4
myHome="http://www.prov.jp/TOP/index.htm"; //強制移動先ページ
myRef = document.referrer; // リンク元退避
if ( (myRef != myURL1) &&  // リンク元が許可ページに…
     (myRef != myURL2) &&
     (myRef != myURL3) &&
     (myRef != myURL4) ){  // いずれも該当していなければ…
   location.href = myHome; // トップページへジャンプ
}
// --></script>


Q:「リンク元に URL に続いて、?log=20030210 のような可変データが付加されています。これを取り除きたいのですが…。」
A:「以下の方法があります。」

document.referrerの内容 :
?つきでリンクする→
●?以下を切り取る。
myURL = document.referrer;
myOfst = myURL.indexOf("?" , 0);
if (myOfst >= 0) myURL = myURL.substring(0 , myOfst);

myURLの内容 : 「
※詳しくは Step.9 , Step.38 参照。



Q:「うまくdocument.referrerが取得できずにトップにもどされてしまい、いっこうに、BBSに、たどりつけず、いたっり、きたり、の永遠の連続・・・ともいうべき事態が生じてしまいました。いったい どこがいけなかったのでしょう。」
A:リンクが安全なサイト!? からの場合も空のストリングを返します。その他のセキュリティ上の問題で document.referrer を返さない場合があるかも知れません。

※<A href>のハイパーリンクではなく、location.href からのページ移動した時がまずいようです。

※[戻る]ボタンでページファイル名が無くなる場合があります。
例) http://www.red.oit-net.jp/tatsuya/java/
←index.htmが消えた



Q:「私のホームページはフレームを使っていて、毎回自分のホームページのindex.htmlよりお越しですね。と表示されてしまうのですが…」
A:参照先が parent.document.referrer になります。

【リファレンス】

● document.referrer プロパティ

リンク元のURLを保持しています。

【書式】
myStr = document.referrer ;

【値】
リンク元のURLの文字列。

読み込み専用でセットすることはできません。

[ファイル]→[開く] や アドレスバー等からユーザが直接URLを打ち込んでページに到着した場合はヌルストリングが返されます。
リンクが安全なサイトからである場合もヌルストリングになります。

目次へ戻ります