![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
190829 | |
写真集の総合目次のページにサイト内検索窓を設置しました。 今年の3月、それまで利用していたYahooのサービスが終了して、サイト内検索が無効になっていました。 フリーのものを探していましたが、適当なものが見つかりません。 検索結果に広告が入ることを容認するとなんとかなるようですが、ちょっと抵抗があります。 何しろ、ここまで、広告なし、というのがこのサイトの隠れたモットーです。 そこで、自分で作るしかないという事になりました。 サイト内検索をするという事は、Googleに、 site:http://ooo.d.dooo.jp/+検索対象 という文字列を送ってやる事です。 つまり、ブラウザに、 http://www.google.co.jp/search?q=site:http://ooo.d.dooo.jp/+検索文字、 という文字列を送ることになります。 これを、HSPで試してみました。HSPではうまくいきます。 といいますか、HSPの文例を見て、これに気付きました。 HSPでは、exec 云々,16、です。 そこで、JavaScriptでこれを組めばいいという事になります。 私、JavaScriptは、ほとんど分かりません。 分かりませんが、このくらいなら付け焼刃で何とかなるかも知れません。 そこで、今度はJavaScriptの文例を探しました。 結果、input、button、href、を結合して使えばいいように思えます。 それを継ぎはぎして試してみると、一応、動いているようには見えるものが出来ました。 ただ、このままでは、いくつか問題点がありました。 まず、検索結果を別窓で表示した方がいいのではないか、という点です。 同じ窓で開いている場合、よくあるのが、検索結果が気にいらず、結果の窓を消してしまうと、ブラウザが終了してしまいます。 この際は、戻るボタンが正解なのです。 ただ、別窓にすると、今度は、ブラウザを終了する際の手間がひとつ増えます。 そこで、折衷案で、別タブで開くことにしました。これは、href呼び出しではなく、window.open(URL)を使う事になります。 もう一つ、 実際の検索作業は、準備してあるボタンをクリックすることで実行されます。 本来は、文字列を入力し、Enterキーを押しても実行される、でもいいはずです。 しかしながら、入力の途中でEnterキーを押してしまうと、実行されるどころか、そこまで入力していた文字列が消えてしまいます。 これは何とかしないといけません。 Enterキーは、document.onkeypressでトラップし、window.event.keyCodeで無効化できます。 トラップして、ボタン処理のルーチンに飛ばすと、Enterがボタンクリックと同じ動作になります。 現在、ここまでで、完成としています。 Enterキーを無効化したのですが、思わぬ、というか、考えようによっては、ごく当たり前の弊害が出ていました。 無効化したページではEnterキーが使えません。 例えば、タブキーでフォーカスを移動させて、目的のボタンにフォーカスを置いて、Enterキーを押すと、普通ならページの移動など、そのボタンをクリックした時と同じ動作をさせることが出来ていたのですが、このページに関してはこの操作ができません。 目的のボタンなどにフォーカスさせてEnterとしても、リンク先には飛ばず、検索結果が表示されてしまいます。 上のEnterキー無効化の件、ブラウザで動作が違います。 IEとEdgeは上の通りで弊害が出ます。 ところが、Chromeでは私の期待通りで、フォーカスの位置でのEnterが有効です。 フォーカスが検索ボックスにある場合は、検索実行ボタンクリックと同じ動作をします。 フォーカスがその他のボタンにあるときは、そのボタンクリックと同じ動作になります。 私は主にChromeを使っています。そういうわけで、このままで良しとします。 本来は、ブラウザを識別して、どうのこうの、という処理が必要なのでしょう。 さて、このスクリプトは、実際に、写真集総合目次のページに組み込んであります。 ここまで、生半可なJavaScriptの知識で作ったもので、どんな弊害があるのか分かりません。 これを真似してはいけません。 その後、見つけた問題点です。 たまに広告が出る時があります。検索する文字列に反応するようです。 画像検索結果が横スクロールしない事があります。 |
|
![]() |
![]() |