URL Checker

URLが正しい場合の表示

URLが正しくない場合の表示

目的

・ページをコピーされて利用されたときに様々な処理を実行させることができます。
  警告表示、重要データの削除(隠蔽)、通報用のメールアドレスを表示など

・リンク元のページのチェックと組み合わせて、直接リンクを発見することができます。
  直接リンクを正しく修正したい場合、不正なリンクを避けたい場合など

解説

<SCRIPT Language="JavaScript">
//■■■初期値■■■
//設置場所のURL
turl = "http://www.shurey.com/";
↑ここにページを設置した正しいURLを記入する。表示のURLと前検索で調べるので、共通する部分だけを記入すれば、そのURL以下で機能する。部分一致にも対応しますので「shurey.com」だけでも動作します。

//■■■固定値■■■
//URLが正しいか調べる
if (document.location.href.indexOf(turl) > -1) { //※応用3・4・5
purl = 1; //合格
} else {
purl = 0; //不合格
}

//オフラインの場合の修正
if (document.location.href.indexOf("file://") == 0) {
purl = 1; //オフライン時には合格したことにする。
↑オフラインでページを修正する際に気づかれないようにするための偽装を施す。逆に、オフラインで表示させたい場合には「1」を「0」に書き換える。
}
</SCRIPT>

<SCRIPT Language="JavaScript">
//合格
if (purl == 1) {
document.write("<font color='#ff0000'>この部分が表示されます。</font><br>タグも使えます。");
↑「""」内では「""」が使えないので「''」を使うことに注意。URLが正しいと判断されたら。document.writeを実行。
}
</SCRIPT>

<SCRIPT Language="JavaScript">
//不合格
if (purl == 0) {
document.write("<font color='#ff0000'>この部分が表示されます。</font><br>タグも使えます。");
↑こちらは、不合格時なので、著作権表示や注意文を記入することができます。オフラインで加工するときには表示されないため、サーバーに転送後、表示されるという仕組みです。
}
</SCRIPT>

応用

1)警告文の表示

alert("警告文");

HPを表示した直後、もしくはif文の処理後に警告文を表示させることができます。
不合格時のスクリプトで、if文内に置けば、不合格時のみHP表示直後に警告文をダイヤログで表示します。

2)自動転送

document.location = "URL";

スクリプト実行の途中で任意のURLへページを切り換えてしまいます。
有無を言わさず転送したり、警告の後に設置すれば、警告を閉じると転送が行われます。

3)リンク元のチェック

if (document.referrer.indexOf(turl) > -1) { //リンク元と指定URLとの比較

最初のif文にある「document.location.href」を「document.referrer」に変更します。
リンク元のURLに「turl」で指定した文字列が含まれているか判定しています。
ローカルでテストする場合は、リンク元が空白になります。

4)リンク元の記録を残す

if (document.cookie == "") { //cookieがない場合
document.cookie = document.referrer; //リンク元をcookieに記録
}
if (document.cookie.indexOf(turl) > -1) { //最初のリンク元記録を参照

ブラウザの記録機能であるcookieを使い、最初のアクセス時にリンク元を記録し、二度目のアクセス時はこれを参照して判定します。そうすることで、サイト内を巡回後にページに辿り着いた時でも、合格判定をせずに外部からの来訪者を見分けることができます。
このcookieの記録はブラウザ(タブ)を閉じるまで有効です。
URLが正しくない場合の表示」をクリックし、次のページで「URLが正しい場合の表示」をクリックして戻ってから、テスト用ボタンをクリックしてみてください。cookieの記録とリンク元が別になることが判ります。

5)文字列の検索方法を変更する

if (document.location.href.indexOf(turl) > -1) { //部分一致
if (document.location.href.indexOf(turl) == 0) { //前方一致
if (document.location.href == turl) { //完全一致

if文によって、2つの文字列を比較しています。
「document.location.href」は表示中のページのURL(対象の文字列)を取得します。「indexOf」という関数は、その文字列の中にturl(比較の文字列)が含まれるかどうかを調べます。「対象の文字列.indexOf(比較の文字列)」となっています。
turlには事前に「http://www.shurey.com/」と入れてあるので、ここでは表示のURLの何文字目にturlが一致するのか、数値で答えが返ってきます。
そこで、返値をif文で比較して、条件分岐しているのです。返値が「-1」の場合は、不一致ということになります。
返値が「0」の場合が、前方一致(対象の文字列の先頭に比較の文字列が一致)になります。これは先頭を1番ではなく0番と数えることに注意が必要です。
そのため返値が「0」より大きいときは、先頭より後の位置を示すことになり、「返値+1」文字目と言うことになります。
部分一致も前方一致も多少の曖昧さが残ります。これは比較の文字列以外はどうでも良いことになります。しかし、それでは不味いという場合に完全一致を使います。曖昧さは全くありません。対象の文字列と比較の文字列が完全に同じ(対象の文字列 == 比較の文字列)でなければならず、書き方はif文の基本となります。(ここでは「=」を1つにしないように注意します。1つだと代入、2つだと比較の意味になります。)

完全一致の問題点として、トップページやディレクトリ内のページで、省略が許される場合に一致しない点があげられます。一般的なサーバの設定では「index.html」は省略されます。これは「http://www.shurey.com/」にアクセスすると「http://www.shurey.com/index.html」が自動的に表示されるということです。しかし、完全一致の考え方では、この2つの文字列は一致しないことになります。そのため、省略される可能性がある場合には、完全一致は正常に動作しないことに注意が必要です。

部分一致:   前方一致:   完全一致:

戻る