当サイトにアクセするには3つのURLから入ることができる。
(1)http://www.gps-walk.sakura.ne.jp | さくらインターネットで取得したドメイン |
(2)http://www.gps-walk.com | 独自に取得したドットコムドメイン |
(3)http://www.55walking.com | 以前に取得したドットコムドメイン |
当サイトが置かれているレンタルサーバー「さくらインターネット」のライト版(当時は300MB)の容量が不足ぎみになって来たので、その上のクラスの「スタンダード」に変更を願い出たら、システム上変更はできないとのこと。新しくスタンダード版をレンタルして、ライト版を廃止する方法しかないらしい。 (ライト版とスタンダード版では機能に違いがあるため)
従って一時的には二重にレンタルすることになり、ドメイン名をライト版で使っていたものをそのまま継承することはできなくなり、新しいドメインを取得せざるを得なくなった。
古い 55walking のドメインにも愛着があって捨てがたく、結局1個のホームページに3個のドメインを持つことになってしまった。
これが、Googleマップのキーを申請するときに仇となり、他の2個のURLから入ってきた人にはエラーメッセージが表示されることになってしまった。
3個のキーを申請して、URL毎に自動で判定して切替える必要が生じた訳だが、いろいろ試してみても切替えがうまく行かない。
丸一日 JavaScript と悪戦苦闘したが素人の私には、敷居が高すぎた。
やっぱり JavaScript の基本を基礎からしっかり勉強しなければならないかぁ・・・・・。
と、思いながらも、どこかに同じようなことを試みているサイトがないか検索してみたが見当たらなかった。 参考書4冊ほどを探してみたが、どうやら書いてありそうな本も見当たらなかった。
ところが、ありがたい事に参考書「GOOGLE MAPS HACKS」に質問を受け付けます、という文とメールアドレスが書いてあるではないか。
そこで厚かましくもオライリー・ジャパン編集部にメールで解決法を質問した。 数日後、編集部から翻訳者の武舎氏からの解答メールが転送されてきた。
それには 『Hack #58にまさにこの方法が載っています。第2版の239ページの 「JavaScriptによる方法 」 をお読みください。』 と、あった。
全くお恥ずかしい限りだが、本をよく読まずに軽率にも質問してしまったという訳だ。 こんな読者にも懇切丁寧な回答をして頂いたことに申し訳ないやら恥ずかしいやら・・・・。
早速「GOOGLE MAPS HACKS」の例に倣って、3個のドメインを切替える下記の JavaScript を追加してみた。
結果は当然OK。
参考書は隅々まで良く読むべし! を肝に銘じた一日だった。
var key_55 = "55walking.com に与えられたKey文字列";
var key_gp = "gps-walk.com に与えられたKey文字列";
var key_sa = "gps-walk.sakura.ne.jp に与えられたKey文字列";
var reg_55 = new RegExp("55walking.com"); // サーバ名にマッチする正規表現を定義
if (reg_55.test(window.location.href)) { // reg_55と現在のページのURLを比較して
loadScript(key_55); // そのスクリプトをロードする
}
var reg_gp = new RegExp("gps-walk.com"); // 次のサーバ名も同様
if (reg_gp.test(window.location.href)) {
loadScript(key_gp);
}
var reg_sa = new RegExp("gps-walk.sakura"); // 3番目も同様
if (reg_sa.test(window.location.href)) {
loadScript(key_sa);
}
// <script>要素を完成させる
function loadScript(key) {
var src = '<' + 'script src=' + '"' +
'http://maps.google.com/maps?file=api&v=2&key=' + key + '"' +
' type="text/javascript"><' + '/script>';
document.write(src);
}
何でもそうだが、模範解答が分かってしまえば、『なーんだ、簡単ではないか!』 と、思うが、それを思いつくか否かには大きな開きがある。
最後の function の部分で文字列に分解しておいて、それらをつなぎ合わせる知恵が働かなかった。 きっと分かっている人にとっては常識の部分だろうが・・・・。