ページの先頭です。
[記事本文へショートカット]


感動から始まる

全ての創造は

ふるぱ-しゃる

不定期更新 ふるぱ!


ご案内

ここは個別記事ページです。

サイトのトップへ戻る

Web拍手

一言連絡などにもどうぞ。

WEB拍手

サイト内検索


お気に入りサイト

英数字・記号 特殊

--

イラスト投稿

ネタ成分多めです。

--

このサイトのバナー

お持ちかえりバナー200×40

リンクフリーです。

--

同人サイトのバナー

お持ちかえりバナー200×40

更新情報載せてます。

--

DL販売始めました

やおよろ堂|digiket やおよろ堂|メロンブックス やおよろ堂|dlsite.com やおよろ堂|とらのあな やおよろ堂|DMM同人

好評発売中です!


2007/04/08(日)

カテゴリ『WEB』

検索キーワードをハイライト表示化

◆2008年10月28日追記
おやすみばっかの☆yasiさんが2バイト対応版に改造された為、
ふるぱでもありがたく、そのソースを導入させていただきました。
 ⇒javascriptで検索語句をハイライト表示

☆yasiさん、反応激遅ですけど使わせていただきました。
ありがとうございます。

(注意)サイト内の検索窓の中に、検索エンジンで使用した単語を
放り込む機能はなくなります。2バイト対応を優先しました。
それらの機能を使う場合はこの記事の続きをお読み下さい。
(今のところ、二つのスクリプトを読み込んで両方の機能を
 実装させる予定はありません。)
◆以上追記終わり。


構想から一週間、遂に完成!!
(いや最終的には完成というのは
 おこがましくて導入が正しいんですけどね。
 結局ある2サイト様の作られた物を見つけただけです。)

それは検索エンジンから来訪された方の、
検索キーワードをハイライト表示する機能です。
(※動作にはブラウザのJavaScriptが有効になっている必要があります。)

サイト管理者、そして閲覧者の方にとって朗報ではないでしょうか。
サイト管理者にとっては導入が凄く楽で、
閲覧者の方にとっては検索結果を探すのがかなり楽になります。

では早速、判り易く具体例を載せます。
記事の詳細ページではサイト管理者さま向けの導入方法を紹介します。


1.先ずはGoogle先生で検索開始。
今回対応出来る検索エンジンは多岐に渡るのですが
先ずは皆さんお馴染みのGoogle先生で検索です。

■検索結果の画像■
Google検索結果 | ふるぱ-しゃる ツンデレ サンデー

今回は試しに「ふるぱ-しゃる ツンデレ サンデー」の3単語で
トリプル検索してみます。検索語の間は半角スペースを空けて下さい。
全角スペースだと検索エンジンは検索語の一部なのか
区切りなのか判断に迷いますので。

【参考】実際に検索するとこんな感じです。
 ⇒「ふるぱ-しゃる ツンデレ サンデー」で実際にGoogle検索


2.さて、Google検索結果のトップに
 ウチへのURLが来ているのでクリックしてみます。

■Googleの検索結果をクリックしてサイトを開く■
ようこそ、ふるぱ-しゃるへ

画像が荒いので見づらいですが、
先ほどの検索語に色が付いて表示されているのが判ると思います。

3.おまけで検索エンジンに入力した検索語が、
サイト内検索欄の中に自動的に挿入されます。

■サイト内検索に語句を自動挿入■
サイト内検索欄に自動挿入された検索語


いかがでしょうか?
秋月は仕事柄、Google検索する事が多いのですが
クリックして入室した先のサイトで、目的の語句が
ぱっと見では見つからず、Ctrl+Fでサイト内検索したり、
Googleでリンクをクリックする時にキャッシュから
開く事も少なくありません。

そう、正に今回の導入は、Googleキャッシュの
色付け機能を擬似的に取り入れる事でした。


今回の導入で検索エンジンからお越しいただく
一元さんのブラウジングの一助となれば幸いです。


ここから先は、この機能を導入する為の説明です。
サイト管理者さま向けです。
物凄く簡単なのでご心配なく、です。


■謝辞
機能の実装方法を説明する前に謝辞を。
この機能のオリジナルであり基本部分は
FuCoder.comのscott.yang様が作られたものです。(英語ページです。)
ここがスタート地点です。大感謝。
2バイト文字を扱わないなら、こちらのサイトのスクリプトで十分です。
 ⇒Search Engine Keyword Highlight with Javascript


さて、日本語は2バイト文字なので上記サイト様の
スクリプトだけでは対応出来ません。
結論から言うと、最終的に上記サイト様のスクリプトを改造して
2バイト対応にされたサイトを見つけてました。
中国のサイトなのですが、残念ながら元の著作者が判りません。
元スクリプト配布のscott.yang様がフリーで配布されているので
ありがたく使わせていただく事とします。


■動作説明
2011/03/15修正
もう3年前に書いた記事なのでうろ覚えなのですが、
コメントを頂いたので記事を読み返してみると、
秋月の説明が大雑把過ぎたと思い修正致しました。

JavaScriptにて検索エンジンに入力された検索キーワードを取得し、
(正確にはURIのリファラーという部分から判断)
任意のhtmlソースの文字列の検索を行います。
そして該当する文字列を、<span class=”hilite”>…</span>タグで
くくります。

以下、検索結果のURLをクリックしてから、
ブラウザに画面が表示されるまでの流れです。

1.任意の単語を検索サイトに入力して検索する。
2.ブラウザに検索結果が出力(表示)される。
3.出力されたサイトのURLをクリックする。
4.対象サイトを表示するのに必要なファイルがダウンロードされる。
  htmlファイルや画像ファイル、スタイルシート、各種スクリプト等など。
  <この時のブラウザの動きはダウンローダーと言えます。>
5.ブラウザがローカルのハードディスクにキャッシュしたhtmlソースの内容を
  メモリに読み込む。
6.メモリに読み込んだ内容(html言語)を翻訳する。
  <この時のブラウザの動きはコンパイラと言えます。>
7.翻訳した結果をブラウザに表示する。
  <この時のブラウザの動きはビューワもしくはレンダラーと言えます。>

以上が、
検索サイトをクリックしてからブラウザにページが表示されるまでの
少し細かい流れになります。(今回の話をややこしくする余分な要素は端折っています。)

今回導入するJavaScript は、6と7の間で動作します。
その動きを6.5とします。
ただ6.5の説明をする前にリファラの説明をします。


ブラウザは、サイト情報をローカルにキャッシュするだけではなく、
HTTPヘッダの1つであるリファラという情報を持っています。
リファラには
「どのURLから(検索サイト経由ならどんな単語を検索して)きたか」
といった情報を持っています。

Googleで「ふるぱ」という単語を検索した時のリファラ(の一部)は、
http://www.google.co.jp/search?hl=ja&q=ふるぱ+++&lr=
になります。

さて上記を踏まえて6.5を説明します。


6.メモリに読み込んだ内容(html言語)を翻訳する。
6.5.リファラから検索単語を抜き出す。(おそらくメモリ上)
  次に5.でメモリにロードしたhtmlのソースの中から検索単語とマッチする値を探す。
  マッチした値を今回導入するスタイルシートで定義したタグでくくる。
  そうして「検索単語を色付きタグでくくったhtmlソース」を
  メモリ上に上書きでロードする。(つまりhtmlの翻訳作業を追加で行っています。)
7.翻訳した結果をブラウザに表示する。


如何でしょうか?
3年前に「Keyword Highlighter」を導入した時は、
導入後にブラウザのJavaScriptをわざとオフにして
検索結果の色付け機能を停止出来る事を検証したのですが、
追記を行っている今回は、「リファラから取得した検索単語を
元にメモリ上で作業を行っている」という事を実証する為に、
特定サイトにリファラを送信しないFireFoxのプラグイン「RefCotrol」を
導入してみました。
結果は、見事成功でした。
上記プラグインを導入後、リファラを吐かないサイトに
「http://fullpa.net/blog/」を指定して、
Googleで「ふるぱ」と検索して出力されたトップページの
URLをクリックしてページを開いても「ふるぱ」の文字は
色の変更は起こりませんでした。


■導入方法
1.先ずはJavaScriptファイルをダウンロードして下さい。
 ⇒ダウンロード:keyword.js(8.97kb)

2.ダウンロード後はお使いのサイトへFTP等でアップロードして下さい。
 ファイルのパーミッションは特に変更は要らないと思います。
 秋月は644で実行しています。
 ご不明な場合はお使いのレンタルスペースのマニュアルを読まれるか、
 管理者にお問い合わせ下さい。

3.機能を導入したいページに上記JavaScriptファイルへの
 リンクを張ってください。
 書式は下記のとおりです。<head>タグと</head>タグの間に記述して下さい。

<script type="text/javascript" src="http://fullpa.net/blog/common/js/keyword.js"></script>

 http://fullpa.net/blog/common/js/keyword.js の部分は
 ファイルをアップロードした先のURLへ変更して下さい。

4.最後に検索キーワードの色付けの設定です。
 これはスタイルシートで設定します。
 お使いのスタイルシートファイルに下記のコードを追加して下さい。

/*[.検索エンジンからの検索キーワードをハイライト表示]
-------------------------------------------------------------*/
.hilite  { background-color: #99ffff;}
.hilite1 { background-color: #99ff99;}
.hilite2 { background-color: #ff99ff;}
.hilite3 { background-color: #99ffff;}
.hilite4 { background-color: #ff9999;}

スタイルシート(.css)ファイルが良く判らない、
htmlファイルに直接書式を指定したい、という方はこちら。

<style type="text/css">
  .hilite  { background-color: #99ffff;}
  .hilite1 { background-color: #99ff99;}
  .hilite2 { background-color: #ff99ff;}
  .hilite3 { background-color: #99ffff;}
  .hilite4 { background-color: #ff9999;}
</style>

 上から順に検索キーワードの1つ目、2つ目に対応しています。
 この設定だと5種類を用いた検索キーワードまで色付けされ
 それ以降の検索キーワードには色が付きません。
 通常は5つでも多いくらいなので問題ないでしょう。
 これは必要なら増やす事が可能です。
 増やす場合は.hiliteの末尾の数字を半角で足して下さい。
 スクリプトファイルの変更は一切必要無いです。
以上で設定完了です。

色の変更はUIC様の色見本などを参考にされると便利です。


■動作確認
 JavaScriptが動作する下記ブラウザで動作確認しています。

・Internet Explore5.0/6.0
・Lunascape3.5/4.0
・Firefox1.5
・Netscape4.7/7.1
・Opera8.5
・OperaMobile for Willcom W-ZERO3


■対応検索エンジン
・AllTheWeb
・百度(噂のバイドゥですね)
・Google
・Lycos
・MSN
・Yahoo
・他にも中国のサイトがいくつか。
(要望があれば対応サイトを増やす予定です。)


■その他
Q1.ライセンスはフリーですか?
A1.と思われます。理由は記事文中に書いたとおりです。

Q2.改造しようとしてエディタで開いたら文字化けしました。
A1.JavaScriptファイルの文字コードはUTF-8で保存しています。
 もし文字化けが起こる場合はエディタで
 文字コードを変えて保存し直して下さい。

Q3.どんなサイトでも導入出来るのですか?
A1.ブログどころかホームページならどこでも導入できます。
ちなみにふるぱ-しゃるは、htmlページにも
phpページにも導入しています。
ただしお使いのページが例えばWordPress 等の
専用ブログソフトウェアであれば、そのソフトに特化した
ツールをお探しになるのも1つの手かもしれません。

Q4.ハイライト以外に文字の加工は出来ないの?
出来ます。ふるぱ-しゃるではこの記事を書いた後に
文字を太くする設定を追加しました。
方法はスタイルシートにfont-weight: bolder; という
指定を追加しています。他にも色々とお試し下さい。。


ご質問があればコメント等でお聞き下さい。
凄く簡単な事ならお答え出来るかもしれません。
まさに今、勉強中です。
2011/03/16追記。私事多忙につきフォローが難しいです。
出来る限り記事に詳細を追記しておきますのでご容赦下さい。


コメント

お世話になります

文中の
(正確にはURIのリファラーという部分から判断)
任意のhtmlソースの文字列の検索を行います。>>
の意味がよくわかりません
ご教授ください。初学者なもので申し訳ありません
今はmysqlより登録された要素を表示してますが、キーワードだけではなくて全文ハイライト表示してしまいます

4945:投稿日時:2011年03月15日 19:40 投稿者:season [返信]

はじめまして、seasonさん。
秋月と申します。

説明記事が不親切だと思い
ブラウザの動作を細かく追記致しました。
ご参照いただけますでしょうか?

>今はmysqlより登録された要素を表示してますが、キーワードだけではなくて全文ハイライト表示してしまいます
判る範囲で切りわけをさせて頂きます。
ハイライト表示されるという事は、
「ブラウザのJavaScriptは動作している。」
「検索結果のリファラ情報をブラウザは取得出来ていない」
「もしくはhtmlソースとマッチングしてスタイルシートで
ハイライトする時に対象文字列を誤読している。」
となります。
なので、記事に追記させていただいたブラウザ動作のフローの中の
6.5 にあたる「HTMLソースの再翻訳作業」に失敗していると思われます。


>今はmysqlより登録された要素を表示してますが
あと、上記がどのようなサイトの構成でどういった動きを
期待されているのかがちょっと理解できませんでした。

詳細が判らないので、これは1つの提案ですが
一旦最小構成で、本スクリプトが動作するかテストされては如何でしょうか?
本家scott.yang様のサイトからダウンロードできるzipには、
JavaScriptとcssの内容が盛り込まれたhtmlがあります。
またhtmlの中には、検索エンジンの検索結果の一部であるリファラーを
擬似的に組み込んであります。
リファラーが私の記事の追記説明で判りづらい場合は、
検索エンジンのクエリーと思っていただいたら
ニュアンスがつかめるかと思います。

ご参考になれば幸いです。

4947:投稿日時:2011年03月16日 00:57 投稿者:秋月らせん [返信]

コメントの投稿 検索キーワードをハイライト表示化に、コメントをどうぞ。





太字 打ち消し線 イタリック アンダーライン

※ コメントにURLを含む場合は承認後に記事に反映されます。

JavaScriptが有効な場合ここにプレビューが表示されます。

上記内容でよろしければ投稿して下さい。→


現在スタイルシートが読み込まれていない状態です。
スタイルシートはサイトのデザインを定義しています。