Javascript で URL が内部リンクであるかの判定
pjax 導入のため Javascript で取得 URL が内部リンクかどうか判定します。
内部リンクは色々な書き方がありますが、下記の場合の条件での判定です。 Javascriptvar url; //取得 URL
var reg = new RegExp("^(https?:)?\/\/"+document.domain);
if (url.match(reg) || url.charAt(0) === "/") {
//内部リンク時の処理
}
if 内の判定が肝で、URL が内部リンクになる条件は次の3つとします。他のものでも内部リンクとなるものはあるのですが、以下の3つならばという条件で判定します。
●「 http://ドメイン 」(または「 https://ドメイン 」) で始まる
●「 //ドメイン 」 で始まる
●「 / 」 で始まる
全て記した場合とプロトコルを省略した場合、ドメインまで、もしくはそれ以上省略した場合の3つがあり、その場合 true を返す文字列判定です。
Boolean 判定var reg = new RegExp("^(https?:)?\/\/"+document.domain);
url.match(reg) || url.charAt(0) === "/"; //boolean
これで a タグ内の href が内部リンクかどうか判定できます。
document.domain の部分はわざわざこう書かず、自分のドメインの文字列に書き直してもらっても使えます。
追記:
ソーシャルボタン等のURLも拾ってきてしまうためコードを大幅に修正いたしました。