Mozillaでプログラミング(XUL) その2
at TECH
1:デフォルトの名無しさん
04/12/05 00:09:18
オラ拡張作る。
前スレ
Mozillaでプログラミング(XUL)
スレリンク(tech板)
2:デフォルトの名無しさん
04/12/05 00:18:44
テンプレ書いてるうちに立ってたorz
XULはXMLベースのUI記述言語です。
Mozilla,Firefox,Thunderbird,Netscape等の
Gecko系のソフトウェアために開発されました。
このスレはXUL、javascriptで利用できるXPCOM、
拡張を作り方などを主に話しあうスレです。
前スレ
Mozillaでプログラミング(XUL)
スレリンク(tech板)
姉妹スレ
Geckoベースのブラウザを作ろう
スレリンク(tech板)l50
>>2-50あたりに関連リンク、近況など。
3:1
04/12/05 00:20:13
>>2
うわ、すまそ
4:デフォルトの名無しさん
04/12/05 00:21:06
>>1
いやいや、スレ立て乙。
5:デフォルトの名無しさん
04/12/05 00:26:06
>>1
乙!
6:デフォルトの名無しさん
04/12/05 00:28:06
Z。
7:デフォルトの名無しさん
04/12/05 00:31:38
みなさん、overlayした拡張を作るときどのようにテストしてるんですか?
Firefoxで、xul単体だけなら引数の-chromeで表示・テストできるんですけど
overlayした拡張のテスト方法が分かりません。
8:デフォルトの名無しさん
04/12/05 00:36:23
MozillaJapan 資料集: コアアーキテクチャ: XUL
URLリンク(www.mozilla-japan.org)
XUL Tutorial 日本語版 - 和訳ドキュメント一覧
URLリンク(www.mozilla.gr.jp)
XULアプリケーション作成入門
URLリンク(www.mozilla.gr.jp)
XUL研 Moz2chなど
URLリンク(xul-app.hp.infoseek.co.jp)
XULプログラマの参考書
URLリンク(www.bekkoame.ne.jp)
9:デフォルトの名無しさん
04/12/05 00:40:47
XUL Planet 聖典
URLリンク(www.xulplanet.com)
10:デフォルトの名無しさん
04/12/05 00:42:28
>>7
ブラウザ(chrome://browser/content/browser.xul)にオーバーレイしたXULなら
毎回ブラウザを再起動してテストしなければならない。
11:デフォルトの名無しさん
04/12/05 01:02:37
関連リンク
Mozilla Cross Reference(ソースコード検索)
URLリンク(lxr.mozilla.org)
上とxulplanetでなんとかなる。以下余談。
mozilla.orgはサイト構成に問題があるので、自力で見つけるのは難しい。
URLリンク(www.mozilla.org)
Components.interfaces.nsILocalFileとか機械的にコピペしてる人は
一度くらい読んでおくといいかも。
URLリンク(www.mozilla-japan.org)
公式拡張サンプル。mykはFirefox用の記事を書いてるって
3ヶ月くらい前に言ってたけど、まだ完成してないらしい。
多分忘れてる。
URLリンク(kb-upgrade.mozillazine.org)
私が書いたコードも入っているが、はっきり言うと全然使えない。
でも、__proto__とかやけにマニアックな解説がある。
URLリンク(wiki.fdiary.net)
前スレの後ろの方で紹介されてた。
wikiだから、いつの間にか化けてるかも。
Javascriptを極めたいなら、
URLリンク(www.crockford.com)
こういうのが好きな人とか。
foo.prototype.__defineGetter__('bar', function(){return 0;});
12:デフォルトの名無しさん
04/12/05 01:05:47
>>10
ありがとうございます。
それは、URLリンク(www.mozilla.gr.jp)に書いてあるように
chromeディレクトリ下にxulなどのファイルを置いた状態でテストできるのでしょうか?
13:デフォルトの名無しさん
04/12/05 01:08:40
もちろんできますよ。
14:デフォルトの名無しさん
04/12/05 01:12:29
>>13
それは、引数の-chromeをつけてFirefox本体を起動するんですか?
質問が多くてすいません
15:デフォルトの名無しさん
04/12/05 01:23:26
いや、そんな必要は無いです。
引数-chromeはあるクロムURLのXULを単体のウィンドウで開きたい時だけ使います。
16:デフォルトの名無しさん
04/12/05 01:26:39
多分、なんか勘違いしてるんじゃないかな。
overlayは当然インストールしないとテストできない。
で、インストールする時にzipで固めずにインストールするといい感じ。
URLリンク(kb-upgrade.mozillazine.org)
17:デフォルトの名無しさん
04/12/05 01:30:00
>>15
そうだったんですかー。
じゃあoverlayしたxulを書いたら、普通に起動するだけでOKなんですね。
ありがとうございました。
>>16
ってやっぱりインストールしないとダメなんですね・・・
installed-chrome.txtを編集するだけじゃダメですか?
18:デフォルトの名無しさん
04/12/05 01:33:17
installed-chrome.txtを編集するのとinstallするのは全く同じ。
インストーラーが書き換えるか手で書き換えるかの違いだけ。
でも、firefoxの場合、フォルダをインストールする方が楽だと思う。
19:デフォルトの名無しさん
04/12/05 01:39:29
>>18
勉強になります。ありがとうございました。
20:デフォルトの名無しさん
04/12/05 01:46:20
だから、順番が逆なんだね。
インストールスクリプトを最初に書いて、
白紙のoverlayをとりあえずインストールするんだよ。
で、いろいろいじって完成したら、コピーをとってアンインストールして、
zipで固めてインストールテスト、公開、鋭いツッコミ、ぎゃあ。
21:デフォルトの名無しさん
04/12/05 01:49:20
開発用の環境とインストールテスト用の環境は分けといた方が楽だよ。
(当然プロファイルは分けて)
22:デフォルトの名無しさん
04/12/05 08:21:21
>>10
毎回ブラウザを再起動しなくてもブラウザ自体をリロードすればいい
#そのためのxuld
Ctrl+\でリロード
URLリンク(nazodane.hp.infoseek.co.jp)
23:デフォルトの名無しさん
04/12/05 10:06:56
>>22
なるほど!!今まで馬鹿みたいに毎回再起動してたわ。
24:デフォルトの名無しさん
04/12/05 10:35:11
漏れは新しいウィンドウ開いて確認してる。
25:デフォルトの名無しさん
04/12/05 12:04:20
>>24
ですね。私もそれです。
26:デフォルトの名無しさん
04/12/05 23:30:52
>>11 に追加
URLリンク(www.hevanet.com)
XUL コンポーネントのサンプル集。 XUL のリファレンスとしても使える。
27:デフォルトの名無しさん
04/12/06 06:00:49
誰あ前スレを閲覧できておくように保存してくれる人など居ないものか?
28:デフォルトの名無しさん
04/12/06 06:30:10
保存してまとめサイトにアップしておきました。
URLリンク(firefox.geckodev.org)
29:デフォルトの名無しさん
04/12/06 06:47:10
>>18
フォルダをインストールってどうやるの?
30:デフォルトの名無しさん
04/12/06 07:43:01
>>29
前スレにあったはず。
31:30
04/12/06 08:30:16
すまん。。
>>29
>>16
32:デフォルトの名無しさん
04/12/06 16:35:35
>>16をわかりやすく言うと、
chromeにjarファイルの代わりにフォルダをいれて、
install.rdfにjarファイルの代わりにフォルダ名を書いとけってことだ
33:デフォルトの名無しさん
04/12/06 19:53:41
>>31
>>32
トン!
34:デフォルトの名無しさん
04/12/08 01:37:07
まとめサイトの和訳チュートリアル見ながら見よう見真似で拡張の中身とか
install.rdf install.jsを書いて試したんですが、いざインストールしても
再起動する時にエラーで正常にインストールされません。
エラー文にはcontent.rdfの位置指定が間違ってるとかあるんですが・・。
35:デフォルトの名無しさん
04/12/08 06:38:25
install.jsはとりあえずは不要では?
また、content.rdfではなく、contents.rdfです。
36:デフォルトの名無しさん
04/12/08 07:18:36
質問です。firefoxの拡張を作ってるのですが
ツリーのカラムヘッダを非表示にするにはどのようにすればよいのでしょうか?
treecolにhideheaderを追加してもダメでした。
37:デフォルトの名無しさん
04/12/08 07:24:12
hidecolumnpicker="true"になってないとか?
38:デフォルトの名無しさん
04/12/08 07:28:17
>>37
ありがとうございます。とりあえずこんな感じで書いてるんですが、ダメでした・・orz
<tree flex="1">
<treecols>
<treecol id="test" hideheader="true" hidecolumnpicker="true" primary="true" flex="1" />
</treecols>
<treechildren>
<treeitem container="true" open="true">
<treerow>
<treecell label="test"/>
</treerow>
<treechildren>
<treeitem>
<treerow>
<treecell label="test1"/>
</treerow>
</treeitem>
</treechildren>
</treeitem>
</treechildren>
</tree>
39:デフォルトの名無しさん
04/12/08 07:31:48
hidecolumnpickerはtreeの属性です。
<tree flex="1" hidecolumnpicker="true">
以下略
40:デフォルトの名無しさん
04/12/08 07:33:25
treeにhidecolumnpicker="true"を書いたらいけました・・・
>>37さんありがとうございました。
スレ汚しすまそ。
41:デフォルトの名無しさん
04/12/08 13:15:49
>>32
肝心なインストールの時はどうやるんだ・・・xpiに固めたら意味ないだろうし・・・
英語読めねー誰か解説してくりー
42:デフォルトの名無しさん
04/12/08 13:19:15
>>41
いや、xpiには固めるんだよ。
43:デフォルトの名無しさん
04/12/08 13:23:50
>>42
マジですか、でもそれじゃあ編集できないんじゃ・・?
44:デフォルトの名無しさん
04/12/08 13:26:28
あーなんとなく意味分かったかも。
45:デフォルトの名無しさん
04/12/08 13:28:56
xpiには固めないでしょ。
情報が古いかもしれないけど、
URLリンク(www.mozilla.gr.jp)
このページに書いてあるように手動でフォルダを置き、設定ファイルを書き換える。
46:デフォルトの名無しさん
04/12/08 13:29:54
そう、いじるのはプロファイルの中身だから、
上手い具合に解凍されてるわけだ。
47:デフォルトの名無しさん
04/12/08 13:30:30
>>45
そっちの方が古い
48:デフォルトの名無しさん
04/12/08 13:32:07
>>45-46
とりあえずxpiに固めて試してみます。
お二人さんありがd
49:デフォルトの名無しさん
04/12/08 13:37:37
tinderstatusとか、xpiだけどインストールすると
解凍された状態になる。
確か、torisugari氏もget file sizeのnon-jarred版を公開してたはずだが、
404だね。
50:デフォルトの名無しさん
04/12/08 18:38:02
一見404でも、この辺にあったりする
URLリンク(cgi29.plala.or.jp)
URLリンク(cgi29.plala.or.jp)
51:デフォルトの名無しさん
04/12/09 03:05:05
install.rdfのIDって適当に書いていいんですかね?
52:デフォルトの名無しさん
04/12/09 03:38:23
>>51
だめ。GUID Generator を使おう。
URLリンク(extensions.roachfiend.com)
53:デフォルトの名無しさん
04/12/09 04:02:42
>>52
おお!サンクス!
54:デフォルトの名無しさん
04/12/09 07:20:19
たまに適当に書いているというか拡張の名前を含めているのもみかけるが。
55:デフォルトの名無しさん
04/12/09 08:21:52
適当すぎ。
56:デフォルトの名無しさん
04/12/09 08:38:40
仕様上の要求はGUIDなので、Web上で公開するならGUIDを使うべき。
実際にはどんな文字列でも動くから、
自分のマシンだけで使う場合は適当でいい。
57:デフォルトの名無しさん
04/12/09 18:08:22
MSのGUIDGenとかで良いよ。
URLリンク(www.microsoft.com)
58:デフォルトの名無しさん
04/12/09 20:09:14
GUIDGenは大文字と小文字が混じってるのがなぁ。
MACアドレス使ってるからこっちがいいんだろうけど。
59:デフォルトの名無しさん
04/12/09 23:19:17
XPCOMで
aIOService.newChannelFromURI(aURISpec).QueryInterface(Components.interfaces.nsIHttpChannel);
とかやってるのを見たのですが、newChannelFromURIの返り値はnsIChannelなのにnsIHttpChannelで
QueryInterfaceできるのは何故でしょうか。
60:デフォルトの名無しさん
04/12/09 23:52:16
nsIHttpChannelはnsIChannelを継承してるから。
URLリンク(www.xulplanet.com)
61:デフォルトの名無しさん
04/12/10 01:43:07
>>60
うーん、それってあまり正確じゃないような。
継承してるのは確かだけどね。
あえて言うなら、「理由はない」な。
aURISpecのプロトコルがhttp[s]?じゃなかったら、
QueryInterfaceは失敗する。
こういう実装がごく自然だってことはわかってほしいが…
62:59
04/12/10 07:28:25
メソッドが返す値はドキュメントに書いてあるインタフェイスを
継承した別のインタフェイスを持っている可能性もあるってこと?
メソッドが返す値が持っている可能性があるインタフェイスの一覧とかって
どこ見たら分かりますか?
63:デフォルトの名無しさん
04/12/10 08:30:46
firefoxでタブを一覧表示しようとしてるのですが
現在開いてるタブをすべて取得するにはどのようにすればよいのでしょうか?
64:デフォルトの名無しさん
04/12/10 08:40:45
gBrowser.mTabContainer.childNodes
65:デフォルトの名無しさん
04/12/10 08:46:02
>>64
ありがとうございます!
66:デフォルトの名無しさん
04/12/10 11:06:21
>>62
>メソッドが返す値はドキュメントに書いてあるインタフェイスを
>継承した別のインタフェイスを持っている可能性もあるってこと?
そうなるね。
でもそれは、継承している親インターフェイス以外でもおき得る。
インターフェイスっていうのは、余分についてる分には文句の付けようがない。
よく本体と手足に喩えられるられるが、
「握手したいから手を差し出せ」
って言われた時、そいつの足が八本あろうがキャタピラになってようが、
手がついていれば握手に支障はない。
逆にいうと、足がいくらたくさんあっても手がなければ握手はできないから、
インターフェイスをきっちり実装するのが重要なんだけどね。
インターフェイスは必要条件を記述するためのものだから、
実際に送りつけられるインスタンスの十分条件とは限らない、って感じだろうか。
足が八本も付いてるのに、パンチしかしないのはもったいないなー、
と感じた時のためのQueryInterfaceで、
「足があるならキックもやらせようか」ということになる。
継承した子クラスってのは、普通の手だと思ってたのが
実は超合金製だった、とかそんな感じだね。
知らなきゃ握手にしか使えないが、
知ってれば釘を打ったりいろいろ使えて便利になる、と。
67:デフォルトの名無しさん
04/12/10 12:22:55
JavaScriptの重たいループ処理をバックグラウンドで実行させる方法はありますでしょうか。
勘で以下のようにやりましたが、まったく処理が動きませんでした。
var runnable = { run : function(){ 重たい処理 } };
const CITHREAD = Components.interfaces.nsIThread;
var thread = Components.classes['@mozilla.org/thread;1'].createInstance(CITHREAD);
thread.init(runnable, 0, CITHREAD.PRIORITY_NORMAL, CITHREAD.SCOPE_GLOBAL, CITHREAD.STATE_JOINABLE);
68:デフォルトの名無しさん
04/12/10 23:23:07
>>66
なるほど。
>>59のコードを書いた人はどうやって
aIOService.newChannelFromURI(aURISpec)の返り値が
Components.interfaces.nsIHttpChannelお持っていると
気付いたのでしょうか。
たまたまQueryInterfaceして分かったってこと?
69:デフォルトの名無しさん
04/12/10 23:32:31
内部の情報に詳しかったんじゃないの?
英語の方ならドキュメントも充実してるようだし・・・
70:デフォルトの名無しさん
04/12/11 01:47:54
xpcom warpped objectかどうかを判定する確実な方法が
しりたいのですが、どうすればいいですか?
71:デフォルトの名無しさん
04/12/11 02:29:33
try-catch構文でQueryInterfaceしてみるのが一番早いのではないでしょうか。
72:デフォルトの名無しさん
04/12/11 03:16:44
>>70
instanceof 構文で出来るよ。
var channel = ioService.newChannel("URLリンク(www.example.com)", null, null);
alert(channel instanceof Components.interfaces.nsIHttpChannel); // おそらく true
alert(channel instanceof Components.interfaces.nsIFTPChannel); // おそらく false
var channel = ioService.newChannel("fURLリンク(ftp.example.com)", null, null);
alert(channel instanceof Components.interfaces.nsIHttpChannel) // おそらく false
alert(channel instanceof Components.interfaces.nsIFTPChannel) // おそらく true
73:デフォルトの名無しさん
04/12/11 06:15:04
treeにアイテムを追加するにはどうすればいいの?
タブはaddTabとかあるけど、treeがいまいち分からん。
74:デフォルトの名無しさん
04/12/11 08:49:33
>>71
>>72
ありがとうございます。
もうひとつ、nsIEnumerator,nsICollectionでは
アイテムの返り値は、nsISupportsですが
例えば、nsICollectionのなかに、複数の[spconnect wapped nsI*]を格納した時
どのように、QueryInterfaceすれば良いのでしょうか。
NO INTERFACEなどが、出てしまい、うまくいきません。おねがいします。
75:デフォルトの名無しさん
04/12/11 09:11:32
try{
support.QueryInterface(Components.interfaces.xxx);
}catch(e){
if(e.name==" NO INTERFACE"}{
//インターフェイスがないとき
}
}
76:74
04/12/11 10:11:56
nsICollectionの中身が全部欲しいから、
GetElementAt(0)で、かってくる
nsISupportsがもっている、interfacesのリストなどが
わかるといいのですが。。
77:73
04/12/11 12:57:17
もしかして、appendChildとか使わないとダメですか?
78:デフォルトの名無しさん
04/12/11 13:09:15
俺だったらDOM使うけど他にも方法あると思うよ
79:デフォルトの名無しさん
04/12/11 14:13:23
>>73
createElementNSで要素を作ってappendChildしていくのも可能だけど
RDFデータソースからテンプレートで生成したほうがいい。
80:デフォルトの名無しさん
04/12/11 14:27:20
一応、nsIClassInfoっていう専用のインターフェイスがあるから、
それをもってるかどうかをまず確認した方がいいね。
81:73
04/12/11 14:30:49
>>79
その方法は、要素の入れ替わりが頻繁に起こるタイプのプログラムに向いてますかね?
そういうのを作ろうとしてるもので・・・
82:デフォルトの名無しさん
04/12/11 14:32:38
>>81
そうそう。動的なツリーを作る場合の定石。
83:デフォルトの名無しさん
04/12/11 14:33:59
要素の入れ替わりが一度でも起こるんならappendChild, removeChildなんてめんどくさくてやってられん。
84:デフォルトの名無しさん
04/12/11 14:48:55
>>82
おお、そうなんですか。ではその方法で行こうと思います。
85:デフォルトの名無しさん
04/12/12 15:03:53
binaryStreamをつかって読み書きしたいのですが
ファイルをバイナリで読み込む方法はわかったけど、
nsILocalFileをつかわずにpythonでいうStringIOのような
ものを使うにはどうすればいい?
下のようにすれば、できるかと思ったけど。
nsISimpleStreamListener.init(outputStream,observer)
outputStream.write("hoge",4)
とすると、かならず固まるか、落ちてしまいます。
正しい使い方を、おしえてください;
86:デフォルトの名無しさん
04/12/12 15:41:35
type="checkbox"にしたtoolbarbuttonやmenuitemで、oncommand時のcheckedプロパティが
MozillaとFirefoxとで逆のようです。
現状ではしかたなくnsPreferencesからapp.idを取得してFirefoxの場合は…としてますが、
他にうまい解決方法はありませんか?
そもそもなぜFirefoxはcheckedが逆になってしまうのか謎。
サンプルコード
<toolbarbutton type="checkbox" oncommand="alert(this.checked);" />
こちらは問題無し
<checkbox oncommand="alert(this.checked);" />
87:デフォルトの名無しさん
04/12/12 16:55:10
>>86
CSSが正しくプロパティを解釈出来てるんなら、
少なくともアトリビュートは正確、ってことになる。
alert((this.getAttribute("checked") == "true")? "Checked": "Not checked.");
でどうだろうか?
88:デフォルトの名無しさん
04/12/12 17:20:53
>>87
それでも結果は同じでした。
89:デフォルトの名無しさん
04/12/12 17:24:02
oncommandとチェックの発生順序かな
是はどうしようもないかと
90:デフォルトの名無しさん
04/12/12 17:34:31
oncommand="setTimeout(function(){alert(event.originalTarget.checked);}, 0);"
としたらうまくいきました。
Firefoxではoncommandよりもcheckedが先に変更されるということか。
91:デフォルトの名無しさん
04/12/12 17:38:23
>>90
そうみたいだね。
DOM的に言えば、Semonkeyの方が正しい挙動だと思う。
92:デフォルトの名無しさん
04/12/12 19:51:56
BookmarkなどのRDFデータソースってどこに置かれてるんでしょう?
93:デフォルトの名無しさん
04/12/12 19:53:00
htmlに変換されて保存されてる
読み出すときはhtmlからrdfに変換されてる
94:デフォルトの名無しさん
04/12/12 22:37:51
それにしてもブックマークのHTMLってなんであんなに汚いんだろう
95:デフォルトの名無しさん
04/12/12 22:38:37
>>93
サンクス
96:デフォルトの名無しさん
04/12/12 23:18:34
>>94
パーサが古いからだろうな。
どう考えてもソース公開以前のコードをそのまま使ってる。
97:デフォルトの名無しさん
04/12/15 10:38:15
Firefoxのタブのコンテキストメニューのオーバーレイってどんな感じでやればいいんでしょう?
98:デフォルトの名無しさん
04/12/15 11:31:35
スクリプトで動的に編集するしかないんじゃない?
99:デフォルトの名無しさん
04/12/15 14:50:31
mTabContainerのonclickを上書きするとか?
行儀悪・・・
100:デフォルトの名無しさん
04/12/15 17:28:17
>>99
popupshowingかpopupshownにイベントリスナーを追加したら?
101:デフォルトの名無しさん
04/12/17 04:31:04
ページがロードされるたびに、WebページのJavaScriptより先にスクリプトを
実行する方法はありますか?
browserにaddEventListener('load')する方式だと遅すぎるようです。
TbEみたいにメソッド乗っ取りするしかないのでしょうか。
102:デフォルトの名無しさん
04/12/17 16:28:12
RDFデータソースの操作って難すぃね
103:デフォルトの名無しさん
04/12/17 16:38:26
URLリンク(www.kanzaki.com)
そういえばこんどRDFの解説本が出るみたいですよ
104:デフォルトの名無しさん
04/12/17 18:34:17
>>102
オブジェクト指向じゃなく手続き型だからね
105:デフォルトの名無しさん
04/12/17 20:45:07
>>103
理論的な部分はともかく、実際に手でコードを書いて遊んでみたほうが
よくわかると思います。
>>104
個人的には究極のオブジェクト指向だと思う。
DOMが子供だましに思えるほど。
106:デフォルトの名無しさん
04/12/17 21:43:47
>>105
オブジェクト指向について分かってないだろ
例:
オブジェクト指向→
rdf=new 〜();
rdf.delete();
手続き型→
rdfutil=new 〜()
rdfutil.delete(rdf);
107:デフォルトの名無しさん
04/12/17 22:58:08
>>106
RDFがわかってないだけでしょ
108:102
04/12/18 00:06:39
難すぃというか面倒くさいね
109:デフォルトの名無しさん
04/12/18 00:09:38
RDFはデータ構造。
オブジェクト指向はプログラミングの様式。
手続き型なのは、RDFを扱うためのMozillaの実装。
110:デフォルトの名無しさん
04/12/18 00:14:27
まあSQLでデータベースをいじるのに比べたら全然難しいよね
111:デフォルトの名無しさん
04/12/18 01:16:32
addEventListenerの第三引数のuseCaptureってのが意味不明なのですが、
これをtrueにするのとfalseにするのとではどう違ってくるのでしょうか?
112:デフォルトの名無しさん
04/12/18 01:53:23
URLリンク(www.w3.org)
URLリンク(www2u.biglobe.ne.jp)
trueだと、リスナーが登録されたノードの内部で起こったイベントについて、そのリスナーが真っ先に呼ばれる。
falseだと、イベントが発生したノードからリスナーが登録されたノードまでイベントが伝搬した後で、マターリとそのリスナーが呼ばれる。
113:デフォルトの名無しさん
04/12/18 02:31:49
>>112
ありがとうございます。
前スレをのぞいたら、具体例が。
なんとなくわかってきました。
902 :デフォルトの名無しさん :04/11/05 09:17:34
現在、Firefoxの拡張作成をちょこちょこ勉強しているのですが、
Tab,Windowの新規作成時のタイミングを得たいのですが、
試してみたaddEventListener("load",では"更新"にも反応してしまいます。
他に何か方法はありますでしょうか?
903 :デフォルトの名無しさん :04/11/05 15:07:29
>>902
window.addEventListener('load', listener, false)
最後のfalseがポイント
114:デフォルトの名無しさん
04/12/18 07:35:45
>>111-113
XUL Event Propagation
URLリンク(www.mozilla-japan.org)
ここに詳しく解説してある
115:デフォルトの名無しさん
04/12/18 22:57:57
開いてるウィンドウをすべて取得したいのですが、RDFデータソース以外から取得できますか?
116:デフォルトの名無しさん
04/12/18 22:59:23
>>115
URLリンク(www.xulplanet.com)
117:デフォルトの名無しさん
04/12/19 15:54:12
外部ファイルからテキストを一行づつ読み込むことってできますか?
nsILineInputStream というのがありますが、の readLine() を呼び出すとクラッシュしてしまいます。
118:デフォルトの名無しさん
04/12/19 17:22:37
XULのウィンドウを最前面ではなく背面に表示したいのですが、
openDialog(URL, "", "alwaysLowered")ではもちろん常に背面に表示されてしまいます。
タスクバーを切り替えてフォーカスしたときや必要なときに最前面に出せるようにはできませんか?
nsIWindowMediatorあたりをさぐってみたのですが、get/setZLevelといったメソッドはなぜか使えないようです。
119:デフォルトの名無しさん
04/12/19 18:14:50
>>117
クラッシュしない。
>>118
noscriptってちゃんと書いてある。
120:デフォルトの名無しさん
04/12/19 18:20:34
>>117
Firefox 1.0 で nsILineInputStream は問題なくうごくよ。
ただ、readLine はすごく遅いから 全部読み込んで、String.split("\n")
したほうがいい。
121:117
04/12/19 19:28:18
当方Firefox1.0(Linux i686)で、やはりクラッシュするするのですが、
>>120 の事情もあるので結局 split("\n");を使うことにしました。ありがとうございます。
122:デフォルトの名無しさん
04/12/19 19:46:33
>やはりクラッシュする
ぶっちゃけ、あんたの書き方が悪いんでしょ。
他人や機械のせいにするくらいなら、掲示板で質問しない方がいい。
123:デフォルトの名無しさん
04/12/20 06:58:42
むしろJavaScriptでクラッシュなんてどうやったらできるんだ
124:デフォルトの名無しさん
04/12/20 08:36:46
「あんたの書き方が悪い」で済ませられない重要なものかもしれないぞ
125:デフォルトの名無しさん
04/12/20 12:03:51
>>123
できる。俺もThunderbirdがクラッシュした。
@mozilla.org/messengercompose/quotingのQuoteMessage()に渡した
nsIStreamListenerで、onStartRequest()が呼ばれた後にonDataAvailable()が
呼ばれる代わりにクラッシュした。コールバックだと、自分のコードのどこが
まずいのかよく分からん。
ソースからデバッグビルドのThunderbirdを作って、Emacs + GDBで追いかけ
ようかと思ったけど、そうなるとXULの範疇越えてるし。
126:デフォルトの名無しさん
04/12/20 18:50:29
前から疑問に感じていたのですが、XPCOMインターフェースの接頭辞nsは何の略ですか?
127:デフォルトの名無しさん
04/12/20 18:59:37
ネットスケープじゃないの。
128:デフォルトの名無しさん
04/12/20 19:02:03
なぜmzじゃないんですか?
129:デフォルトの名無しさん
04/12/20 19:11:19
Netscape社が作ったからだろ。おまえの頭はカボチャか?
130:デフォルトの名無しさん
04/12/20 19:14:41
カボチャじゃありません。ウンコです。
|人
|___)
|__)クスクス
|∀・ )
 ̄ ̄ ̄ ̄
131:デフォルトの名無しさん
04/12/21 00:25:06
>>128
mozITXTToHTMLConv や mozIJSSubScriptLoader とか moz から始まるのがあったりする。
132:デフォルトの名無しさん
04/12/21 05:54:43
任意のWindowのResourceを取得する方法はありますか?
getWindowForResourceはあるのですが、その逆がありません。
133:デフォルトの名無しさん
04/12/21 18:09:15
>>131
あるにはあるけどかなりの少数派だね。
いまさらnsをmozに付け替えるわけにはいかないから、
nsの意味を捏造した方が早いと思う。
ネームスペースとか。
COMに全然関係ないな…
134:132
04/12/21 18:21:47
少し質問を変えます。
getWindowForResourceを使うためにWindowのResourceを取得する方法を模索しているのですが、
URLリンク(www.xulplanet.com)
ここを見ると、templateでなぜかIDが割り当てられていて
そのIDからgetWindowForResourceしてるようなのですが
WindowのResourceを取得する方法は他にないのでしょうか?
135:デフォルトの名無しさん
04/12/21 19:07:32
>>134
なぜリソースが必要なんだ?
136:デフォルトの名無しさん
04/12/21 19:13:26
>>135
リソースというかgetWindowForResourceで使う引数が欲しいのです。
137:デフォルトの名無しさん
04/12/21 19:15:01
普通にwindowがあれば要らないんじゃない?
138:デフォルトの名無しさん
04/12/21 19:24:56
>>137
それが要るプログラムな訳でして・・
とりあえず>>134のURL先のサンプルソースで割り当てられてあるIDを
RDFデータソースから取得できたらいいのですが。
139:デフォルトの名無しさん
04/12/21 20:00:37
>>138
多分、かなりアホなことやってると思うよ。
とりあえず、>>134を読んでリソースの受け取り方がわからないようじゃ、
RDFとか口走るのはどうかと思う。
つーか、あなたは>>115でしょ?
データソース、本当に要るのか?
ウィンドウのリストがあれば満足なんじゃないのか?
140:デフォルトの名無しさん
04/12/21 20:16:34
このスレだけでもずいぶんいろんなプロジェクトが進んでるみたいだけど
完成したら晒してもらえるかな?
たとえば以前あった、Googlebarの検索語を全角空白で区切っても
ちゃんと動作するようにしたのなんかぜひ使ってみたいし、
このスレで出た質問がどう生かされたのか見てみたい。
141:デフォルトの名無しさん
04/12/21 20:26:58
最近このスレに感じの悪いやつが一人紛れ込んでるな。
142:デフォルトの名無しさん
04/12/21 20:51:08
>>139
はぁ、説明するのまんどくさいんでもういいです。
143:デフォルトの名無しさん
04/12/21 20:56:00
むしろ、情報を小出しにしてるやしの方がアレだと思う。
まあ、ムキにならずにタチの悪い質問はスルーした方がお互いの為ではあるな。
144:デフォルトの名無しさん
04/12/21 21:38:49
強制IDまだ~?と言ってみるテスト。
>>140
>いろんなプロジェクトが進んでるみたい
公開されているのがほとんどです。(ScrapBookとかMoz2chとか)
>Googlebarの検索語を全角空白で区切ってもちゃんと動作するようにしたの
是は簡単にできる気がします。
>>134
resourceという変数はDOMの(要素の)ノードが入っていますのでそれを入れればいいかと
145:144
04/12/21 21:40:21
というかgetWindowForResourceからノード返せといっているのか。
window.document.getElementsByTagName("*")でいいかと
146:デフォルトの名無しさん
04/12/21 21:56:09
>>145
多分違う。
147:144
04/12/21 21:58:58
いや、>>132のやりたい事
148:デフォルトの名無しさん
04/12/21 21:58:59
>resourceという変数はDOMの(要素の)ノードが入っています
そもそもこれが間違い
149:144
04/12/21 22:00:05
あ…
属性ノードの間違いorz
スマソ
150:デフォルトの名無しさん
04/12/21 22:03:27
混沌としてきたなぁ。
もしDOMの話をしてるんだったら、属性じゃなくて、要素のID属性だから、
それでいいんだけど、多分、>>132のやりたいことは
コンテナからRDFResouceを直に取り出すことじゃないかな。
151:デフォルトの名無しさん
04/12/21 22:04:08
んでリファレンス見たら単にID渡せば良いだけという罠
152:デフォルトの名無しさん
04/12/21 22:06:40
とりあえず、>>134 は勘違いをしている確立が高いと。
何をしたいかがわからないと答えようがないなぁ
153:132
04/12/21 22:13:37
皆さん、すいません。
IDを渡せばいいってのは分かるんですが、Window Mediatorデータソースから
直接getWindowForResourceの引数に使う値を取り出したいのです。
154:デフォルトの名無しさん
04/12/21 22:31:14
データソースってとこ良く分からんがWindow MediatorはXPCOMをインスタンス化しただけだから引数に使う値はない。
#ウインドウ一覧が欲しいという事なのかな
#もうちょっと具体的にお願いします。
155:デフォルトの名無しさん
04/12/21 22:37:47
>>154
>>139-142
156:デフォルトの名無しさん
04/12/21 22:38:46
>>154
URLリンク(xulplanet.com)
このコンポーネントを使用してるのですが
>ウインドウ一覧が欲しいという事なのかな
はい、とりあえずそうです。
157:デフォルトの名無しさん
04/12/21 22:40:27
んでID付けたくない理由は?
158:デフォルトの名無しさん
04/12/21 22:44:42
というかRDFの奴が一通り使えるしRDFについて学ぶのが良いと思う。
でも単純なリストではないって事???
159:デフォルトの名無しさん
04/12/21 22:45:27
データソースから取り出すには、コンテナを初期化して、
Enumeratorを回すのが定石。
でも、ウィンドウのリストがほしいだけだったら、mediatorでも出来る上に
どっちみちSimpleEnumeratorの説明をしなくちゃならんから、
遠回りしてるだけなんだよ。
だから、情報を小出しにすんな、って言われてるでしょ?
160:デフォルトの名無しさん
04/12/21 22:47:12
>>156
頼むから、getEnumeratorを使ってくれ。
RDFは、もうちょっと知識が身に付いたあとでも遅くないから。
161:デフォルトの名無しさん
04/12/21 22:50:10
>>115-116
実は2分で結論が出てることを、ここまで引っ張ってきてるわけだ…
162:132
04/12/21 23:06:26
いや、単純にウィンドウのリストを取得するだけなら分かりますし、できるんですが。
ていうか、説明が難しい上にスレも荒れるので、自力で解決したいと思います・・
今後自分に対するレスはもう不要です、いやほんとに。
163:デフォルトの名無しさん
04/12/21 23:10:29
やり方 URLリンク(wiki.fdiary.net) に書いてきた
164:デフォルトの名無しさん
04/12/23 11:24:59
ところで、>>132 さんが使おうとしているgetWindowForResourceって使えます?
Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator).getWindowForResource("window-1");
エラー: Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator).getWindowForResource is not a function
165:デフォルトの名無しさん
04/12/23 13:04:35
>>164
>>66
URLリンク(www.xulplanet.com)
166:デフォルトの名無しさん
04/12/24 05:27:02
厨房もじらーさんってまだ生きてるのかな?(・∀・)
167:デフォルトの名無しさん
04/12/24 12:41:37
>>166
メールでも送ってみたら?
168:デフォルトの名無しさん
04/12/26 21:44:00
こんな事できたのか。。おれてきメモ。
var docroot = window.content.document.documentElement
docroot.innerHTML += '<p id="hoge">hoge</p>'
window.content.document.getElementById("hoge")
//もうひとつ
var doc = document.implementation.createDocument("","html",null)
var range = doc.createRange();
range.selectNodeContents(doc.documentElement);
range.collapse(true);
var cf = range.createContextualFragment(htmlcontent)
doc.documentElement.appendChild(cf)
var serializer = new XMLSerializer();
var xml = serializer.serializeToString(doc);
これで、htmlも簡単にxmlに変換できるのね。
169:デフォルトの名無しさん
04/12/31 12:46:05
テキストファイルの文字コードの自動認識する方法ってありますか?
170:デフォルトの名無しさん
04/12/31 17:41:00
>>169
あるよ
171:デフォルトの名無しさん
04/12/31 18:37:24
ウィンドウにフォーカスがあるか調べるメソッドかなんかあります?
172:デフォルトの名無しさん
04/12/31 18:44:04
自己解決しますた。
173:デフォルトの名無しさん
04/12/31 19:04:51
>>170
どのようにすれば自動認識できますか?
174:デフォルトの名無しさん
04/12/31 19:08:22
自動認識はできないんじゃ?
確かflyson氏のページに日本語の文字コードを簡易的に識別する関数があったが…
175:デフォルトの名無しさん
04/12/31 21:04:18
>>173
他のプログラム言語で書かれた判定式を移植
#Mozilla内部にもあるはずだけどJSからは使えないはず
176:デフォルトの名無しさん
04/12/31 23:08:31
>>22の拡張を入れたらフロントエンドからアンインストールしても「次回の起動時に削除されます」
とか書かれて再起動しても消えてくれない・・・・
とりあえず手動で消すにはどうしたらいいですかね
177:デフォルトの名無しさん
04/12/31 23:13:22
プロセスが残ってない?
Winならタスクマネージャで調べてみて。
178:デフォルトの名無しさん
05/01/01 00:10:49
>>177
プロセスで殺しても無理でした。ついでにPCごと再起動しても無理です・・・
179:デフォルトの名無しさん
05/01/01 00:14:28
extension.rdfあたりを手動でいじればいいんじゃ?
180:デフォルトの名無しさん
05/01/02 05:37:34
nsIRequestObserverのonStopRequestで、statusCodeに2147500033という数値が返ってきました。
この数値の意味を知る方法はありますか?
181:デフォルトの名無しさん
05/01/02 08:32:13
それは、NS_ERROR_NOT_IMPLEMENTEDだな。
idlでは定義されてるんだが、実装を書かないとそうなる。
182:デフォルトの名無しさん
05/01/02 08:35:05
>>66の例でいくと、「握手しようとしたら、空振り」エラーだ。
183:デフォルトの名無しさん
05/01/02 10:14:40
握手に失敗しても空振りとは言わんな
むしろ空手形とかそんなんだろ
184:デフォルトの名無しさん
05/01/02 22:29:41
空手形もおかしい
185:デフォルトの名無しさん
05/01/03 22:20:51
ページ読み込み完了時に処理させたいのですが、どのようにしたらいいでしょうか?
mTabBox.addEventListener("load", test, true);
現在このようにやってますが、これでは早すぎます。
186:デフォルトの名無しさん
05/01/03 22:29:54
>>185
mTabBox.addEventListener("load", test, false);
でいかがでしょうか? (>>111-114 参照)
187:デフォルトの名無しさん
05/01/03 22:33:01
>>186
ありがとうございます。
それも試しましたが、それだとうまく"完了時"に取得できないようです。
他の方法があればよいのですが・・・
188:デフォルトの名無しさん
05/01/04 02:04:40
nsITreeViewを自分で実装したツリーで、setCellTextしてもすぐにはツリーセルのテキストが変わらず、
なぜかそのセルを選択状態にすると変更が反映されます。
これをどうにかすぐに反映させるようにできないでしょうか?
189:188
05/01/05 23:54:27
自己解決というか実装の仕方を変えたので質問を取り下げます。
190:デフォルトの名無しさん
05/01/08 12:16:32
firefoxの拡張機能で、インストール時に独自の設定ファイルを作る方法ってあります?
191:デフォルトの名無しさん
05/01/08 13:19:32
デフォルト設定を*.jsで定義したいという話なら、
だとしたら、しかるべきパスにしかるべきファイルを置いて
*.xpiに含めればいいと思う。
192:190
05/01/08 17:55:27
>>191
defaults/preferences/*.js ではなくて、独自の「ファイル」の方法ってことです。
で、さっき気が付いたんだが、 *.xpi の中に setting.xml とか置いておけば、インストール時に
%ProfD%/extensions/{extension-uuid}/setting.xml
に展開されるから独自の設定ファイルを置けることがわかったので、解決しました。
が、これだとアップデート時にもsetting.xmlが上書きされてしまうという問題点がうまれてしまいました。
193:デフォルトの名無しさん
05/01/08 18:36:29
>>192
> defaults/preferences/*.js ではなくて、独自の「ファイル」の方法ってことです。
そういうポリシーになってないと思う。
194:デフォルトの名無しさん
05/01/08 19:17:09
>>192
xpiにあらかじめ設定ファイルを含めるのではなく、初回起動時に生成できればいいよね。
アップデート時は設定ファイルの存在を判定して、あればそのまま使うように。
195:デフォルトの名無しさん
05/01/08 20:02:27
nsIPrefServiceに任意のファイルに設定を出力する機能があったと思うけど、
これは特定のブランチ以下だけを吐くとかできるのかな?
無理なら、TbEみたいに自力で実装するしかないかと。
196:190
05/01/09 12:06:31
やっぱり起動するときに、設定ファイルを捜したり作ったりする処理が必要なのか…。
皆さん、ありがとうございました。
197:デフォルトの名無しさん
05/01/12 02:03:26
Mozillaのインクルードディレクトリ、
あちこちに散らばってるのですが全部手動で指定するのはダルイです。
皆さんどうやって対応しているのですか?
#include "xpcom/xxxx.h"
みたいにしてます?
198:デフォルトの名無しさん
05/01/12 02:19:51
拡張の多言語版の配布方法で困っています。
ある拡張の公式なバージョン(例えばen-USとja-JP)とは別にローカライズ版(例えばde-DE)が存在するとき、
ローカライズ版をインストールしたドイツ人のユーザが拡張の更新ボタンを使って公式バージョンの最新版へ
アップデートすると、ロケールに食い違いが生じて赤字のXULエラーが出てしまうという問題があるようです。
このような場合、ローカライズ版を一度インストールした人は今後ずっとローカライズ版がアップデートされるのを
待つように注意を促すしかないのでしょうか?
199:デフォルトの名無しさん
05/01/12 03:13:45
それしかないと思う。現状のExtensionManagerでは対策のしようがないので。
あと、ローカライズ版作成者の人に
ローカライズ版専用の自前の更新情報を提供してくれるよう
協力を呼びかけるくらいだろうか。
200:デフォルトの名無しさん
05/01/12 03:28:50
ありがとうございます。やはりそうですか…。
ローカライズ版作者にupdate.rdfを作ってもらうという方向でいきます。
しかし不要なトラブルを避けるためにいっそ自分で全ロケールを管理した方がマシのような気もしてきました。
201:デフォルトの名無しさん
05/01/12 12:42:06
それが妥当だと思うなあ。 > 自分で全部管理
手数は増えるけど。UNIXのソフトは普通そうだよね。
リリースが近くなったらアナウンスして翻訳してもらって。
202:デフォルトの名無しさん
05/01/12 20:22:28
XULのwikiに拡張の説明のローカライズの仕方書いてきた。(って言ってもコピペだけど)
#んで書いてみて、何か物凄い面倒なことしてるな>俺って思ったのは気のせい。
>>200
全部自分で管理、新たな文が必要になった所は英語で補完しとけば良いと思う。
203:デフォルトの名無しさん
05/01/17 06:28:07
XUL開発のために今までずっとnglayout.debug.disable_xul_cacheをtrueにしてたけど、
久々にfalseにしたらFirefoxが驚くほど軽快に。デバッグするときと普段とでいちいち値を
切り替えるのは面倒だけど。
204:デフォルトの名無しさん
05/01/19 00:13:03
HTMLの文字列をDOM treeに変換したいときは、どうするのがベストでしょうか。
空のHTMLDocumentを作って、innerHTMLに入れるのかと
思ったんだけど、document.implementation.createDocumentで作られるのは
XMLDocument…。
205:デフォルトの名無しさん
05/01/19 07:27:41
DOMParserは?
206:デフォルトの名無しさん
05/01/19 14:06:53
>>205
DOMParserはXMLのパースしかできなかったと思われ。
207:デフォルトの名無しさん
05/01/19 19:24:47
URLリンク(firefox.geckodev.org)
のHello worldチュートリアルを見てコンテキストメニューとツールのとこに
メニューを追加する方法はわかったのですが、
タブの右クリックメニューのところにはどうやって追加するのでしょうか?
難しいんですか?
208:デフォルトの名無しさん
05/01/19 19:34:15
>>207
簡単ですよ
209:207
05/01/20 20:24:58
>>208
toolkit.jarを書き変えれば確かに簡単だけど、
自分の拡張からだとXBLとかいうのを書くみたいでちょっと初心者には無理ですね。
来年がんばります。
210:208
05/01/20 20:42:48
>>209
勘違い?
#オーバーレイを使えば肝胆なのに
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5365日前に更新/246 KB
担当:undef