Mozillaでプログラミング(XUL) その2
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG前スレ
Mozillaでプログラミング(XUL)
http://pc5.2ch.net/test/read.cgi/tech/1019704370/
0002デフォルトの名無しさん
NGNGXULはXMLベースのUI記述言語です。
Mozilla,Firefox,Thunderbird,Netscape等の
Gecko系のソフトウェアために開発されました。
このスレはXUL、javascriptで利用できるXPCOM、
拡張を作り方などを主に話しあうスレです。
前スレ
Mozillaでプログラミング(XUL)
http://pc5.2ch.net/test/read.cgi/tech/1019704370/
姉妹スレ
Geckoベースのブラウザを作ろう
http://pc5.2ch.net/test/read.cgi/tech/1023546699/l50
>>2-50あたりに関連リンク、近況など。
0004デフォルトの名無しさん
NGNGいやいや、スレ立て乙。
0005デフォルトの名無しさん
NGNG乙!
0006デフォルトの名無しさん
NGNG0007デフォルトの名無しさん
NGNGFirefoxで、xul単体だけなら引数の-chromeで表示・テストできるんですけど
overlayした拡張のテスト方法が分かりません。
0008デフォルトの名無しさん
NGNGMozillaJapan 資料集: コアアーキテクチャ: XUL
http://www.mozilla-japan.org/catalog/architecture/xul/
XUL Tutorial 日本語版 - 和訳ドキュメント一覧
http://www.mozilla.gr.jp/jt/xul/progress.html
XULアプリケーション作成入門
http://www.mozilla.gr.jp/~kazhik/xul/tutorial.html
XUL研 Moz2chなど
http://xul-app.hp.infoseek.co.jp/
XULプログラマの参考書
http://www.bekkoame.ne.jp/~poetlabo/WWW/XULref/XUL_Reference.html
0009デフォルトの名無しさん
NGNGhttp://www.xulplanet.com/
0010デフォルトの名無しさん
NGNGブラウザ(chrome://browser/content/browser.xul)にオーバーレイしたXULなら
毎回ブラウザを再起動してテストしなければならない。
0011デフォルトの名無しさん
NGNGMozilla Cross Reference(ソースコード検索)
http://lxr.mozilla.org/mozilla/
上とxulplanetでなんとかなる。以下余談。
mozilla.orgはサイト構成に問題があるので、自力で見つけるのは難しい。
http://www.mozilla.org/scriptable/components_object.html
Components.interfaces.nsILocalFileとか機械的にコピペしてる人は
一度くらい読んでおくといいかも。
http://www.mozilla-japan.org/docs/tutorials/tinderstatus/
公式拡張サンプル。mykはFirefox用の記事を書いてるって
3ヶ月くらい前に言ってたけど、まだ完成してないらしい。
多分忘れてる。
http://kb-upgrade.mozillazine.org/index.php/Main_Page
私が書いたコードも入っているが、はっきり言うと全然使えない。
でも、__proto__とかやけにマニアックな解説がある。
http://wiki.fdiary.net/xul/
前スレの後ろの方で紹介されてた。
wikiだから、いつの間にか化けてるかも。
Javascriptを極めたいなら、
http://www.crockford.com/#javascript
こういうのが好きな人とか。
foo.prototype.__defineGetter__('bar', function(){return 0;});
0012デフォルトの名無しさん
NGNGありがとうございます。
それは、http://www.mozilla.gr.jp/~kazhik/xul/tutorial.htmlに書いてあるように
chromeディレクトリ下にxulなどのファイルを置いた状態でテストできるのでしょうか?
0013デフォルトの名無しさん
NGNG0014デフォルトの名無しさん
NGNGそれは、引数の-chromeをつけてFirefox本体を起動するんですか?
質問が多くてすいません
0015デフォルトの名無しさん
NGNG引数-chromeはあるクロムURLのXULを単体のウィンドウで開きたい時だけ使います。
0016デフォルトの名無しさん
NGNGoverlayは当然インストールしないとテストできない。
で、インストールする時にzipで固めずにインストールするといい感じ。
http://kb-upgrade.mozillazine.org/index.php/Dev_:_Tips_:_Disable_XUL_cache
0017デフォルトの名無しさん
NGNGそうだったんですかー。
じゃあoverlayしたxulを書いたら、普通に起動するだけでOKなんですね。
ありがとうございました。
>>16
ってやっぱりインストールしないとダメなんですね・・・
installed-chrome.txtを編集するだけじゃダメですか?
0018デフォルトの名無しさん
NGNGインストーラーが書き換えるか手で書き換えるかの違いだけ。
でも、firefoxの場合、フォルダをインストールする方が楽だと思う。
0019デフォルトの名無しさん
NGNG勉強になります。ありがとうございました。
0020デフォルトの名無しさん
NGNGインストールスクリプトを最初に書いて、
白紙のoverlayをとりあえずインストールするんだよ。
で、いろいろいじって完成したら、コピーをとってアンインストールして、
zipで固めてインストールテスト、公開、鋭いツッコミ、ぎゃあ。
0021デフォルトの名無しさん
NGNG(当然プロファイルは分けて)
0022デフォルトの名無しさん
NGNG毎回ブラウザを再起動しなくてもブラウザ自体をリロードすればいい
#そのためのxuld
Ctrl+\でリロード
http://nazodane.hp.infoseek.co.jp/extension/xuld.xhtml
0023デフォルトの名無しさん
NGNGなるほど!!今まで馬鹿みたいに毎回再起動してたわ。
0024デフォルトの名無しさん
NGNG0025デフォルトの名無しさん
NGNGですね。私もそれです。
0026デフォルトの名無しさん
NGNGhttp://www.hevanet.com/acorbin/xul/top.xul
XUL コンポーネントのサンプル集。 XUL のリファレンスとしても使える。
0027デフォルトの名無しさん
NGNG0028デフォルトの名無しさん
NGNGttp://firefox.geckodev.org/?%B4%D8%CF%A2%A5%B9%A5%EC%A5%C3%A5%C9#i0181e3b
0029デフォルトの名無しさん
NGNGフォルダをインストールってどうやるの?
0030デフォルトの名無しさん
NGNG前スレにあったはず。
0032デフォルトの名無しさん
NGNGchromeにjarファイルの代わりにフォルダをいれて、
install.rdfにjarファイルの代わりにフォルダ名を書いとけってことだ
0033デフォルトの名無しさん
NGNG>>32
トン!
0034デフォルトの名無しさん
NGNGinstall.rdf install.jsを書いて試したんですが、いざインストールしても
再起動する時にエラーで正常にインストールされません。
エラー文にはcontent.rdfの位置指定が間違ってるとかあるんですが・・。
0035デフォルトの名無しさん
NGNGまた、content.rdfではなく、contents.rdfです。
0036デフォルトの名無しさん
NGNGツリーのカラムヘッダを非表示にするにはどのようにすればよいのでしょうか?
treecolにhideheaderを追加してもダメでした。
0037デフォルトの名無しさん
NGNG0038デフォルトの名無しさん
NGNGありがとうございます。とりあえずこんな感じで書いてるんですが、ダメでした・・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>
0039デフォルトの名無しさん
NGNG<tree flex="1" hidecolumnpicker="true">
以下略
0040デフォルトの名無しさん
NGNG>>37さんありがとうございました。
スレ汚しすまそ。
0041デフォルトの名無しさん
NGNG肝心なインストールの時はどうやるんだ・・・xpiに固めたら意味ないだろうし・・・
英語読めねー誰か解説してくりー
0042デフォルトの名無しさん
NGNGいや、xpiには固めるんだよ。
0043デフォルトの名無しさん
NGNGマジですか、でもそれじゃあ編集できないんじゃ・・?
0044デフォルトの名無しさん
NGNG0045デフォルトの名無しさん
NGNG情報が古いかもしれないけど、
http://www.mozilla.gr.jp/~kazhik/xul/tutorial01.html
このページに書いてあるように手動でフォルダを置き、設定ファイルを書き換える。
0046デフォルトの名無しさん
NGNG上手い具合に解凍されてるわけだ。
0047デフォルトの名無しさん
NGNGそっちの方が古い
0048デフォルトの名無しさん
NGNGとりあえずxpiに固めて試してみます。
お二人さんありが�d
0049デフォルトの名無しさん
NGNG解凍された状態になる。
確か、torisugari氏もget file sizeのnon-jarred版を公開してたはずだが、
404だね。
0050デフォルトの名無しさん
NGNGhttp://cgi29.plala.or.jp/mozzarel/addon/obsolete/phoenix_firebird_firefox/non-jarred/
http://cgi29.plala.or.jp/mozzarel/addon/firefox/tinderstatus/
0051デフォルトの名無しさん
NGNG0052デフォルトの名無しさん
NGNGだめ。GUID Generator を使おう。
http://extensions.roachfiend.com/cgi-bin/guid.pl
0053デフォルトの名無しさん
NGNGおお!サンクス!
0054デフォルトの名無しさん
NGNG0055デフォルトの名無しさん
NGNG0056デフォルトの名無しさん
NGNG実際にはどんな文字列でも動くから、
自分のマシンだけで使う場合は適当でいい。
0057デフォルトの名無しさん
NGNGhttp://www.microsoft.com/downloads/details.aspx?FamilyID=94551f58-484f-4a8c-bb39-adb270833afc&DisplayLang=en
0058デフォルトの名無しさん
NGNGMACアドレス使ってるからこっちがいいんだろうけど。
0059デフォルトの名無しさん
NGNGaIOService.newChannelFromURI(aURISpec).QueryInterface(Components.interfaces.nsIHttpChannel);
とかやってるのを見たのですが、newChannelFromURIの返り値はnsIChannelなのにnsIHttpChannelで
QueryInterfaceできるのは何故でしょうか。
0060デフォルトの名無しさん
NGNGhttp://www.xulplanet.com/references/xpcomref/ifaces/nsIHttpChannel.html
0061デフォルトの名無しさん
NGNGうーん、それってあまり正確じゃないような。
継承してるのは確かだけどね。
あえて言うなら、「理由はない」な。
aURISpecのプロトコルがhttp[s]?じゃなかったら、
QueryInterfaceは失敗する。
こういう実装がごく自然だってことはわかってほしいが…
006259
NGNG継承した別のインタフェイスを持っている可能性もあるってこと?
メソッドが返す値が持っている可能性があるインタフェイスの一覧とかって
どこ見たら分かりますか?
0063デフォルトの名無しさん
NGNG現在開いてるタブをすべて取得するにはどのようにすればよいのでしょうか?
0064デフォルトの名無しさん
NGNG0065デフォルトの名無しさん
NGNGありがとうございます!
0066デフォルトの名無しさん
NGNG>メソッドが返す値はドキュメントに書いてあるインタフェイスを
>継承した別のインタフェイスを持っている可能性もあるってこと?
そうなるね。
でもそれは、継承している親インターフェイス以外でもおき得る。
インターフェイスっていうのは、余分についてる分には文句の付けようがない。
よく本体と手足に喩えられるられるが、
「握手したいから手を差し出せ」
って言われた時、そいつの足が八本あろうがキャタピラになってようが、
手がついていれば握手に支障はない。
逆にいうと、足がいくらたくさんあっても手がなければ握手はできないから、
インターフェイスをきっちり実装するのが重要なんだけどね。
インターフェイスは必要条件を記述するためのものだから、
実際に送りつけられるインスタンスの十分条件とは限らない、って感じだろうか。
足が八本も付いてるのに、パンチしかしないのはもったいないなー、
と感じた時のためのQueryInterfaceで、
「足があるならキックもやらせようか」ということになる。
継承した子クラスってのは、普通の手だと思ってたのが
実は超合金製だった、とかそんな感じだね。
知らなきゃ握手にしか使えないが、
知ってれば釘を打ったりいろいろ使えて便利になる、と。
0067デフォルトの名無しさん
NGNG勘で以下のようにやりましたが、まったく処理が動きませんでした。
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);
0068デフォルトの名無しさん
NGNGなるほど。
>>59のコードを書いた人はどうやって
aIOService.newChannelFromURI(aURISpec)の返り値が
Components.interfaces.nsIHttpChannelお持っていると
気付いたのでしょうか。
たまたまQueryInterfaceして分かったってこと?
0069デフォルトの名無しさん
NGNG英語の方ならドキュメントも充実してるようだし・・・
0070デフォルトの名無しさん
NGNGしりたいのですが、どうすればいいですか?
0071デフォルトの名無しさん
NGNG0072デフォルトの名無しさん
NGNGinstanceof 構文で出来るよ。
var channel = ioService.newChannel("http://www.example.com/", null, null);
alert(channel instanceof Components.interfaces.nsIHttpChannel); // おそらく true
alert(channel instanceof Components.interfaces.nsIFTPChannel); // おそらく false
var channel = ioService.newChannel("ftp://ftp.example.com/", null, null);
alert(channel instanceof Components.interfaces.nsIHttpChannel) // おそらく false
alert(channel instanceof Components.interfaces.nsIFTPChannel) // おそらく true
0073デフォルトの名無しさん
NGNGタブはaddTabとかあるけど、treeがいまいち分からん。
0074デフォルトの名無しさん
NGNG>>72
ありがとうございます。
もうひとつ、nsIEnumerator,nsICollectionでは
アイテムの返り値は、nsISupportsですが
例えば、nsICollectionのなかに、複数の[spconnect wapped nsI*]を格納した時
どのように、QueryInterfaceすれば良いのでしょうか。
NO INTERFACEなどが、出てしまい、うまくいきません。おねがいします。
0075デフォルトの名無しさん
NGNGsupport.QueryInterface(Components.interfaces.xxx);
}catch(e){
if(e.name==" NO INTERFACE"}{
//インターフェイスがないとき
}
}
007674
NGNGGetElementAt(0)で、かってくる
nsISupportsがもっている、interfacesのリストなどが
わかるといいのですが。。
007773
NGNG0078デフォルトの名無しさん
NGNG0079デフォルトの名無しさん
NGNGcreateElementNSで要素を作ってappendChildしていくのも可能だけど
RDFデータソースからテンプレートで生成したほうがいい。
0080デフォルトの名無しさん
NGNGそれをもってるかどうかをまず確認した方がいいね。
0082デフォルトの名無しさん
NGNGそうそう。動的なツリーを作る場合の定石。
0083デフォルトの名無しさん
NGNG0084デフォルトの名無しさん
NGNGおお、そうなんですか。ではその方法で行こうと思います。
0085デフォルトの名無しさん
NGNGファイルをバイナリで読み込む方法はわかったけど、
nsILocalFileをつかわずにpythonでいうStringIOのような
ものを使うにはどうすればいい?
下のようにすれば、できるかと思ったけど。
nsISimpleStreamListener.init(outputStream,observer)
outputStream.write("hoge",4)
とすると、かならず固まるか、落ちてしまいます。
正しい使い方を、おしえてください;
0086デフォルトの名無しさん
NGNGMozillaとFirefoxとで逆のようです。
現状ではしかたなくnsPreferencesからapp.idを取得してFirefoxの場合は…としてますが、
他にうまい解決方法はありませんか?
そもそもなぜFirefoxはcheckedが逆になってしまうのか謎。
サンプルコード
<toolbarbutton type="checkbox" oncommand="alert(this.checked);" />
こちらは問題無し
<checkbox oncommand="alert(this.checked);" />
0087デフォルトの名無しさん
NGNGCSSが正しくプロパティを解釈出来てるんなら、
少なくともアトリビュートは正確、ってことになる。
alert((this.getAttribute("checked") == "true")? "Checked": "Not checked.");
でどうだろうか?
0088デフォルトの名無しさん
NGNGそれでも結果は同じでした。
0089デフォルトの名無しさん
NGNG是はどうしようもないかと
0090デフォルトの名無しさん
NGNGとしたらうまくいきました。
Firefoxではoncommandよりもcheckedが先に変更されるということか。
0091デフォルトの名無しさん
NGNGそうみたいだね。
DOM的に言えば、Semonkeyの方が正しい挙動だと思う。
0092デフォルトの名無しさん
NGNG0093デフォルトの名無しさん
NGNG読み出すときはhtmlからrdfに変換されてる
0094デフォルトの名無しさん
NGNG0095デフォルトの名無しさん
NGNGサンクス
0096デフォルトの名無しさん
NGNGパーサが古いからだろうな。
どう考えてもソース公開以前のコードをそのまま使ってる。
0097デフォルトの名無しさん
NGNG0098デフォルトの名無しさん
NGNG0099デフォルトの名無しさん
NGNG行儀悪・・・
0100デフォルトの名無しさん
NGNGpopupshowingかpopupshownにイベントリスナーを追加したら?
0101デフォルトの名無しさん
NGNG実行する方法はありますか?
browserにaddEventListener('load')する方式だと遅すぎるようです。
TbEみたいにメソッド乗っ取りするしかないのでしょうか。
■ このスレッドは過去ログ倉庫に格納されています