当ブログではヘッダーバーを固定しており、左上のロゴをクリックするとトップページに戻るようにしています。レスポンシブデザインによるスマートフォン対応を行いました。PCブラウザでのデザインが、そのままスマホでのデザインに反映されるようになったことで、スマホにおいては状況により、このロゴは「戻る」ボタンとしてクリックされるようになるんじゃないかと思い、記事のページが表示された時のみ、前のページに戻るような機能を実装することにしました。特にindexの2ページ目以降から記事ページに飛んだ時とかに威力を発揮するのではと思っています。
今回の機能実装のポイント
固定でトップページのURLを指定していたロゴのリンクに対して、以下を実行しました。
- 「表示されているページが記事ページ」かつ「リンク元が当ブログのページ」かつ「リンク元が記事ページ以外のページ」であった場合 → 「リンク元のURL」を指定
- 上記以外の場合 → 「トップページのURL」を指定
技術的なポイントとしては、以下の通りです。
- 表示されているページのURLの取得
- 参照元のページのURLの取得
- URLを比較するための正規表現
現在表示されているページのURLを取得する
JavaScriptで「現在表示されているページのURL」を取得する方法は以下の通りです。
今回は「ホストネイム(ドメイン)」や開発環境にも対応させるべく「ポート番号」なども取得するようにしました。
ホストネームの取得
ポート番号の取得
以下のようにすると、上記のホストネームとポート番号を同時に取得することも可能です。
参照元(リファラー)のURLを取得する
JavaScriptで「参照元ページのURL」を取得する方法は以下の通りです。
※直接URLを指定したり、ブックマークなどから訪問してきたりして、参照元がない場合、戻り値は空文字となります。
正規表現でURLを評価する
上記の通り「現在表示されているページのURL」と「参照元のページのURL」を取得したら、次は正規表現を使って以下を調べます。
- 「現在表示されているページ」が記事ページかどうか
- 「参照元のページ」が同一のホスト内のページかどうか
- 「参照元のページ」が記事ページ以外のページかどうか
「現在表示されているページ」が記事ページかどうか調べる
当ブログの記事ページのURLは以下のような形式となっています。(WordPressのパーマリンク設定「数字ベース」)
http://mae.chab.in/archives/123
このURLを正規表現で表すと以下のようになります。
正規表現を使って実装すると以下のようになります。
ちなみに、WordPressの記事ページの他のタイプのパーマリンクを正規表現で書くと以下のようになります。
「参照元のページ」が同一のホスト内のページかどうか調べる
参照元のページのURLに自分のサイトの「プロトコル + ドメイン(ホスト名)」が含まれているかどうか調べます。当ブログの「プロトコル + ドメイン」は以下の通りとなっています。
これを正規表現で表すと以下のようになります。
正規表現を使って実装すると以下のようになります。
「参照元のページ」が記事ページ以外のページかどうか調べる
上記の2つを合わせた形となりますね。正規表現を使って実装すると以下のようになります。
正規表現オブジェクト(RegExp)を使って実装する
本番環境と開発環境でホスト名(ドメイン)が異なる場合もあるので、正規表現内に変数を使いたくなります。この場合、RegExpオブジェクトを使って以下のように正規表現を書くことができます。上記の「現在表示されているページ」が記事ページかどうか調べる方法を書き換えてみます。
[参考サイト]
JavaScriptで機能を実装する
上記の方法を用いて、「表示ページごとにロゴのリンクを変更する機能」を実装すると以下のようになります。
HTMLは以下の通りとなります。リンクのURL(トップページのURL)やアンカーテキスト(ブログタイトル)はWordPressの関数を使って表示させています。またFont Awesomeを使ってアイコンを切り替えるようにするので、空のi要素を配置しています。
次にJavaScriptの実装は以下の通りとなります。コメントアウトで説明をつけておきます。
機能の実装は以上となります。挙動に関しては、実際にこちらのブログ内を遷移してお確かめください。
コメント