• ベストアンサー

Firefoxの検索バーでの動作について

Firefox3.6.17を使っています。 ブラウザの下にある検索バーで、検索の文字を入れて、「次を検索」を押していくときの動作について教えてください。 順番に「次へ検索(または前を検索)」を押し続けると サイトの一番最後にヒットした文字の後に、必ずまた一番最初にヒットする文字へ移動し、 「次へ検索」を押し続ける限り、永遠にそのページ内で検索が繰り返されます。 これを、ページの一番最後の文字になったら一番最初に戻らないように設定することは出来ないでしょうか。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#151570
noname#151570
回答No.1

Ctrl+Fのページ内検索ですね。 「前を検索」もありますが、上下の最後で終了というのはできないと思います。 その替りの案ですが、 ○3.6バージョンをまだ使われている理由は聞きませんが、Ver4.0対応で、まだ実験的なアドオンですが、 Ctrl+Fで、そのページ内検索バーが画面の上部にも移動表示ができて、検索用語を窓に入れると、ページ内にあるその用語のすべてがハイライトをしてくれて、上下の↓をクリックしなくても、どこにあるのか判るようになるFindbar Tweakというアドオンがあります。 なお、表示されたバーは、Ctrl+Fで消えてくれますので参考に挙げておきます。 動作には現状では問題ないようです。 http://mozilla-remix.seesaa.net/article/205701737.html ○3.6バージョンでしたら、アドオンのSearch WP導入で、Firefoxの検索バーからページ内検索と用語のハイライトも可能になるものがありますから、そんなことではどうでしょうか。 Ver2.4.2が3.6対応になっています。 http://mozilla-remix.seesaa.net/article/90323905.html https://addons.mozilla.org/ja/firefox/addon/searchwp/versions/

kymsn
質問者

お礼

早々のご回答ありがとうございました。 やはり、上下の最後でストップすることは無理なんですね。 スクロール量の多いサイトで単語を抜粋することが多いため、 ページ内の最後でピタっと止まってくれると手間がかからないのですが、 ご紹介いただいたアドオンを見てバージョンアップも含めて検討したいと思います。 ありがとうございました。

その他の回答 (2)

回答No.3

多少の問題はあれど、一応、できなくはない。 以下、回答を理解するのに必要なスキルはこれくらいと想定しておくよ。 http://okwave.jp/qa/q4361632.html http://okwave.jp/qa/q5299009.html http://okwave.jp/qa/q6438063.html #手元にあるのがFirefox 7.0a1preなので、実際に3.6.xでやってみたわけじゃなく間違ってたらすまん。 #この頃はまだomni.jarじゃないんだね。 Firefoxのインストール先にtoolkit.jarってのがあるので、こいつを展開します。 content\global\bindings\findbar.xmlってのがあると思います。 ★何も作業してないから、ここから解りそうもないなら☆まで読み飛ばしてもいい。 #browser.jarに含まれるbrowser.jsでfindbar要素を追加している。その要素がどういうものであるかを定義しているんだと思う。 それはこんなふうになっていると思います。 http://mxr.mozilla.org/mozilla-central/source/toolkit/content/widgets/findbar.xml ページ内検索の「次を検索」を押すと、onFindCommandが実行される http://mxr.mozilla.org/mozilla-central/source/toolkit/content/widgets/findbar.xml#228 つまり、これだ。 http://mxr.mozilla.org/mozilla-central/source/toolkit/content/widgets/findbar.xml#1745 startFindは設定値に応じて、選択しているテキストを検索内容とするように代入しているだけなので無視。 http://mxr.mozilla.org/mozilla-central/source/toolkit/content/widgets/findbar.xml#1694 あとで、ざっくりやりたいが、searchStringってのはおそらく、直前に検索した内容だろう。 #実は俺もよくわかっていないのだけれど、おそらく、browserプロパティは、browser.xmlから来ているんだと思う。 http://mxr.mozilla.org/mozilla-central/source/toolkit/content/widgets/browser.xml#298 もしかしたら、browser.jarの方のtabbrowser.xmlからかもしれない。 http://mxr.mozilla.org/mozilla-central/source/browser/base/content/tabbrowser.xml#2278 http://mxr.mozilla.org/mozilla-central/でfastFindを検索するとまともなのがそれくらいしかないからそう予想したんだが。 まぁ、どっちにしても、fastFindプロパティでnsITypeAheadFindのインターフェースを求めていることがわかるだろう。そいつのfindメソッドを呼び出すって話だ。 ここからはC++の話。各関数の戻り値はどうやら最後の仮引数で指定するみたいだ。 http://mxr.mozilla.org/mozilla-central/source/toolkit/components/typeaheadfind/nsTypeAheadFind.cpp#893 http://mxr.mozilla.org/mozilla-central/source/toolkit/components/typeaheadfind/nsTypeAheadFind.cpp#878 こいつらは、 http://mxr.mozilla.org/mozilla-central/source/toolkit/components/typeaheadfind/nsTypeAheadFind.cpp#298 FindItNowメソッドの戻り値を受け取っている。 位置を比較して http://mxr.mozilla.org/mozilla-central/source/toolkit/components/typeaheadfind/nsTypeAheadFind.cpp#393 開始位置よりも前に、検索内容が見つかったらhasWrappedをtrueにして、 http://mxr.mozilla.org/mozilla-central/source/toolkit/components/typeaheadfind/nsTypeAheadFind.cpp#395 戻り値を調整。 http://mxr.mozilla.org/mozilla-central/source/toolkit/components/typeaheadfind/nsTypeAheadFind.cpp#567 ちなみに、これらはちゃんとidl側で定義されている http://mxr.mozilla.org/mozilla-central/source/toolkit/components/typeaheadfind/nsITypeAheadFind.idl#111 と、なっていることがわかったところでfindbar.xmlに戻ります。 ☆超えてまで検索するのはC++側の問題なんです。 さすがにC++のコードを書き換えて、リビルドはやりたくないですから、超えた時の戻り値を判定して、逆向きに検索を1回行うことにしました。 http://mxr.mozilla.org/mozilla-central/source/toolkit/content/widgets/findbar.xml#1745 こう書き換えればいけます。圧縮してtoolkit.jarを置き換え、Local Settings\Application Data\Mozilla以下を一応削除しておいてくださいね。 var res; // Ensure the stored SearchString is in sync with what we want to find if (this._findField.value != this._browser.fastFind.searchString) res = this._find(this._findField.value); else res = this._findAgain(aFindPrevious); if (res == this.nsITypeAheadFind.FIND_WRAPPED) { res = this._findAgain(!aFindPrevious); res = this.nsITypeAheadFind.FIND_NOTFOUND; this._updateStatusUI(res, aFindPrevious); return; } if (res == this.nsITypeAheadFind.FIND_NOTFOUND) { if (this.open()) { 本当は、returnをすぐするつもりはなかったのですが、そうしないとどうも、「ループしました」のメッセージを変更したことが反映されなかったのでやむなく。 当然のことながら、今後のFirefoxのアップデート等によりtoolkit.jarが上書きされるパターンには弱いです。 問題は何か、というと、iframeやobjectで参照している他の文書の中に探しているキーワードが含まれていた場合、位置関係を求めるのに失敗して、境界を超えてしまうようだ、ということに、検証中に気が付きました。

kymsn
質問者

お礼

お礼が遅くなり大変失礼しました。 ご丁寧な回答をありがとうございます。 情けないことにスキル不足で最初からつまづいてしまいました。 書き換えとかは実行したことがなかったのですが、せっかく教えていただいたのでちゃんと理解してからトライしてみたいと思います。 本当にありがとうございました。

  • koredewa
  • ベストアンサー率57% (283/493)
回答No.2

>ブラウザの下にある検索バーで、検索の文字を入れて、「次を検索」を押していくときの動作について教えてください。  No.1さんが言う通り「前を検索(P)」で対応するほかないのかな・・・ 「Ctrl+F」ページ内検索ですが・・ デフォルトでも「検索バー」を消す事は可能です。 但し条件がありますが・・ 検索バーに「フォーカス」がある状態でしたら「Escキー」をクリックすれば消えます。 これは、多少「Firefox」を使用している方でしたら知っている事です。 それから・・・ 「Ctrl+F」だけで、表示・非表示を切り換えられるアドオンは、 以前から存在している(Firefox3.6にも対応している)ものを紹介した方が親切ですね。 Toggle Find Bar 0.1.1 https://addons.mozilla.org/ja/firefox/addon/toggle-find-bar/ 私は、 別に急いで「Firefox 4」にする必要はないと思います・・ Firefox 3.6 は、2011 年 9 月までサポート予定ですから・・(まだまだ使えます・・・) Firefox 5 は、6月21日リリース予定(現地時間)ですから、(あくまで予定・・・) バージョンアップは「Firefox 5 がリリースされてから」でも良いと思います。 「6月21日リリース予定」もう直ぐです。 私自身・・・まだ「Firefox 3.6」のプロファイルあります。 十分まだ使えます・・ 当然・・下記も同時使用中 ・4.0 ・5.0b

kymsn
質問者

お礼

ご回答ありがとうございます。 少し前まで使っていたIEが、ページ内で「Ctrl+F」をすると 最後の文字にくると「ドキュメントの検索が完了」と表示されて便利だったので Firefoxでもそういう機能があったらと思ったのですが、 教えていただいたアドオンを詳しく見てみたいと思います。 PCのスペックが低いため、Firefoxに限らずバージョンアップには慎重になってしまっていますが、Firefox5がリリースされるとのことなので、検討したいと思います。 色んな情報をありがとうございました。

関連するQ&A

専門家に質問してみよう