MozillaZine.jp フォーラム
https://forums.mozillazine.jp/

webBrowserFindが別のタブに働く
https://forums.mozillazine.jp/viewtopic.php?f=26&t=8028
ページ 11

作成者:  masahal [ 2008年12月12日(金) 22:02 ]
記事の件名:  webBrowserFindが別のタブに働く

webBrowserFindでの文字列検索が時々別のタブ内のブラウザで行われてしまいます。
検索しても詳しいドキュメントが見つからないんですが、どういう書き方をすればいいんでしょうか。

--------------------------------------------------------------
再現方法:
1.メニューから次の関数を実行できるようにする。
コード:
searchString : function(){
   var browser = gBrowser.selectedBrowser;
   var webBrowserFind = browser.webBrowserFind;
   webBrowserFind.searchString = "Facebook";
   webBrowserFind.wrapFind = true;
   webBrowserFind.findNext();
   return;
}


2.同じページ(ここでは http://mainichi.jp/life/electronics/cne ... tml?inb=ff を使います)を二つ開いておく。

3.一方のタブを選択して、上の関数を実行する。
4.もう一方のタブを選択して、上の関数を実行する。
5.再び元のタブを選択して、上の関数を実行する。
→webBrowserFindがもう一方のタブに対して行われる。
---------------------------------------------------------------------

環境は
Firefox3.04
WindowsXP
です。

作成者:  masahal [ 2008年12月12日(金) 22:05 ]
記事の件名:  Re: webBrowserFindが別のタブに働く

書いてから思いましたが、普通にバグとして報告すべきかもしれませんね……。

作成者:  [ 2008年12月13日(土) 01:06 ]
記事の件名:  Re: webBrowserFindが別のタブに働く

masahal さんが書きました:
webBrowserFindでの文字列検索が時々別のタブ内のブラウザで行われてしまいます。
検索しても詳しいドキュメントが見つからないんですが、どういう書き方をすればいいんでしょうか。
webBrowserFind.QueryInterface(Components.interfaces.nsIWebBrowserFindInFrames).currentSearchFrame の値を設定するのが誰の仕事なのか、という問題だと思うのですが、こういったコードを見た感じでは、自動的に設定してもらえるわけではなくて webBrowserFind を利用する側の責任で設定しないといけないような気がします。

とりあえず、
コード:
   var browser = gBrowser.selectedBrowser;
   var webBrowserFind = browser.webBrowserFind;
   webBrowserFind.QueryInterface(Components.interfaces.nsIWebBrowserFindInFrames).currentSearchFrame = window.content;
   webBrowserFind.searchString = "Facebook";
   webBrowserFind.wrapFind = true;
   webBrowserFind.findNext();
このようにすればそのタブのコンテンツのトップのフレームから検索されますので、そのタブ内で検索されるはずです。
ただしこの場合、子フレームで見つかったような場合でも、その次の検索では親フレームに戻ってしまいます。
まじめにやるなら各タブごとの currentSearchFrame を保持しておいて、タブ切り替え時か検索前に、そのタブ用の currentSearchFrame を設定し直さないといけないんじゃないでしょうか。

作成者:  masahal [ 2008年12月14日(日) 18:53 ]
記事の件名:  Re: webBrowserFindが別のタブに働く

あ さんが書きました:
webBrowserFind.QueryInterface(Components.interfaces.nsIWebBrowserFindInFrames).currentSearchFrame の値を設定するのが誰の仕事なのか、という問題だと思うのですが、こういったコードを見た感じでは、自動的に設定してもらえるわけではなくて webBrowserFind を利用する側の責任で設定しないといけないような気がします。


なるほどFirefoxの元コードを見なきゃなりませんでしたか。

とりあえず問題は解決しました。ありがとうございます。

作成者:  [ 2008年12月15日(月) 23:55 ]
記事の件名:  Re: webBrowserFindが別のタブに働く

masahal さんが書きました:
なるほどFirefoxの元コードを見なきゃなりませんでしたか。

見なきゃならないわけではないですが、使用例を探すにはいいと思います。
あるいは、似たようなことをしているアドオンを知っているなら、そのソースを見てみるとか。

ページ 11 All times are UTC + 9 hours
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/