1read 100read
2012年6月プログラム350: Mozillaでプログラミング(XUL) その3 (545) TOP カテ一覧 スレ一覧 2ch元 削除依頼
ソフトウェア開発技術者取れた奴の集い (371)
おまいら最強のシストレFXプログラムをしてみろよ (391)
Perlを使って2ちゃんねるにHello Worldを書き込む (213)
D言語は多分コケると思っている人の数→ (373)
UIデザインガイドライン 2007 (449)
今はじめるプログラミング言語をさがすスレ (508)

Mozillaでプログラミング(XUL) その3


1 :06/11/27 〜 最終レス :12/05/02
オラ拡張作る。
XULはXMLベースのUI記述言語です。
Mozilla、Firefox、Thunderbird、Netscape等の
Gecko系のソフトウェアために開発されました。
このスレはXUL、JavaScriptで利用できるXPCOM、
拡張の作り方などを主に話しあうスレです。
前スレ
Mozillaでプログラミング(XUL) その2
http://pc8.2ch.net/test/read.cgi/tech/1102172958/
姉妹スレ
Geckoベースのブラウザを作ろう
http://pc5.2ch.net/test/read.cgi/tech/1023546699/l50
参考サイト
Mozilla Developer Center
http://developer.mozilla.org/
XULPlanet
http://www.xulplanet.com/
過去スレ
Mozillaでプログラミング(XUL)
http://pc5.2ch.net/test/read.cgi/tech/1019704370/
>>2-50あたりに関連リンク、近況などがあるかも。

2 :
ずるしてらくしてかれいに2げっとかしらかしら〜

3 :
XULはMozilla Corporationの商標だぞ
勝手に使うなよ

4 :
There is no data.
There is only xul.

5 :
>>3
商標についての知識が皆無のようだね。

6 :
XUL® でいいのか?

7 :
2chって™とか ™ って表示されないんだっけ?
♥は出るのにな

8 :
お 出るじゃんXUL™

9 :
そもそも>>3も勝手に使ってる件w

10 :
var foo.prototype = {
hoge: function foo_hoge(){
...
}
}
のような書き方をよく目にしますが、foo_hogeにはどういう意味があるのでしょうか?

11 :
foo_hogeでググれ

12 :
いや、
foo.prototype = {
hoge: function(){
...
}
};
ではなく、
foo.prototype = {
hoge: function foo_hoge(){
...
}
};
とすることに意味はあるのか、ということを知りたいのです。

13 :
デバッグがしやすくなる。
XPConnectに絡んだエラーが出たときとか、
関数名があればそれがエラーコンソールに出てくるから、
それを見ただけで大体の場所がわかる。

14 :
>>11
ちょっとワラタ

15 :
>11
思ったより検索結果が少ないことに驚いてるぜ俺。

16 :
XUL Tutorialを読んでXPCOMを試しているんですけど、エラーになって困ってます。
TutorialのXPCOMのページにある最初の例
var aFile = Components.classes["@mozilla.org/file/local;1"].createInstance();
if (afile) aFile.queryInterface(Components.interfaces.nsILocalFile);
を試しているんですけど、
Error: uncaught exception: Permission denied to get property UnnamedClass.classes
というエラーがでてしまい、先に進めません。
どうやら Compoments.classes というところでエラーになっているようです。
alert(Components.classes); // これでエラーになる
どなたかアドバイスお願いします。

17 :
すいません、ぐぐったら
http://www.xulplanet.com/tutorials/xulqa/q_pdenyucc.html
そのままありました。
しかし原因はわかりましたが、解決策がいまいちわかりません。
chromeにする、みたいなことがかいてあるんですが。どうするんだろ。

18 :
Mozillaでプログラミング(XUL) その2
http://pc8.2ch.net/test/read.cgi/tech/1102172958/952-956
952 名前:デフォルトの名無しさん 投稿日:2006/10/22(日) 22:35:33
user_pref("capability.principal.myapp.id","http://www.example.com/");
user_pref("capability.principal.myapp.granted","UniversalXPConnect");
こんな感じでローカルファイルではなくて外部のURLにXPConnectの特権を与えることはできないのでしょうか?
953 名前:デフォルトの名無しさん 投稿日:2006/10/23(月) 13:39:48
>952
これはどう?
ttp://piro.sakura.ne.jp/latest/blosxom.cgi/webtech/javascript/2006-06-27_unsinged-script.htm

19 :
>>16
http://developer.mozilla.org/ja/docs/XUL_Tutorial:Manifest_Files
を参考に、マニフェストファイルを作成して、適当なディレクトリを
chrome に登録する。
そこに、置いたファイルが chrome: で始まる URL でアクセスできたら、XPCOM の例は
確認できると思うけど、その前に、
ttp://piro.sakura.ne.jp/xul/tips/x0000-2.html
を読んでおいた方が無用な苦労をしなくてすむかも。

20 :
>>18をヒントにいろいろ検索し、以下のようにすることでできるようになりました。
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
ただし、毎回確認ダイアログがでます。署名付きスクリプトにすればいいみたいですが、よくわかりません。
ローカルのxulファイルを実行しているときは、他のローカルファイルにもアクセスできてほしいんですけど、きっとそういうわけにはいかないんでしょうね。
それで、今度はnsILocalFileオブジェクトの使い方がわかりません。XULPlanetのXPCOMリファレンスを参考にしているのですが、エラーになります。
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
var aFile = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
aFile.initWithPath('example.txt'); // ここでエラー
エラー内容は次のとおりです。
Error: uncaught exception: [Exception... "Component returned failure code: 0x80520001 (NS_ERROR_FILE_UNRECOGNIZED_PATH)
[nsILocalFile.initWithPath]" nsresult: "0x80520001
(NS_ERROR_FILE_UNRECOGNIZED_PATH)" location: "JS frame :: file://localhost/Users/wada/tmp/xul/tut1.xul :: test1 :: line 218" data: no]
UNRECOGNIZED_PATHだとあるんですけど、どういう意味でしょうか。もちろんexample.txtは存在します。
教えてくんで申し訳ありませんが、アドバイスいただけないでしょうか。

21 :
>>19
ああ、新しいレスがあったんですね。すみません。
今から読んでchromeとやらを勉強します。

22 :
>>20
ちゃんとnsILocalFileで検索したのかな?
XULPlanetのインターフェースリファレンスを見ればいいんだけど。
http://www.xulplanet.com/references/xpcomref/ifaces/nsILocalFile.html#method_initWithPath
Arguments:
filePath: A string which specifies a full file path to a location.

23 :
20>>
22>>
チュートリアルにも加えておきました。
そういや、
http://developer.mozilla.org/ja/docs/XUL_Tutorial:Templates
にあるような特権の説明、XPCOMのセクションにも加えたほ方が良いのかな?
なんで、テンプレートにあるんだろうと思ったら、
昔はテンプレートの方が XPCOM より前のセクションだったみたいですね。

24 :
XPCOMで遊ぶならMCRでidl定義を見るのもいい方法だ
ttp://lxr.mozilla.org/mozilla/

25 :
というかドキュメントが糞過ぎて見ないと分らない罠。

26 :
最終的にはソースを読むことになるんだけどな

27 :
そーっすね

28 :
>>1に追加すべき日本語の資料って
XUL Tutorial 日本語版
http://developer.mozilla.org/ja/docs/XUL_Tutorial
XUL Wiki
http://wiki.fdiary.net/xul/
XUL Apps > Tips&Technics - outsider reflex (やや古め?)
http://piro.sakura.ne.jp/xul/tips/
あたりかな?ほかになんかある?

29 :
XULアプリケーション作成入門
http://www.mozilla.gr.jp/~kazhik/xul/tutorial.html

30 :
連投になってスマソ
Mozilla 資料 - コアアーキテクチャ: XUL
http://www.mozilla-japan.org/catalog/architecture/xul/

31 :
Code snippets
ttp://developer.mozilla.org/en/docs/Code_snippets
mozillaZineから移してるみたい
ttp://kb.mozillazine.org/Category:Example_code

32 :
便利かもしれない開発ツール
○拡張○
Extension Developer's Extension
http://ted.mielczarek.org/code/mozilla/extensiondev/
XPXOMViewer
http://xpcomviewer.mozdev.org/
○Eclipse○
EclipseXUL(XULRunnerアプリの開発向け)
http://eclipul.sourceforge.net/
XulBooster(Firefox用拡張の開発向け)
http://cms.xulbooster.org/

33 :
ぎゃあ、XPXOMViewerってなんだよ・・・
元のページのタイトルが間違ってんじゃん・・・
正しくはXPCOMViewerってことで

34 :
>>33
言われるまで気づかなかった

35 :
これってXPCOM Component Viewerとは別物なの?

36 :
Component Object Model Component Viewer って変な感じ

37 :
地域化(locale)が全く出来ません。
.batファイルでスクリプトを書いてパックしてるんだけど・・・
パック後じゃないと内容は確認できないの?

38 :
chrome.manifestかinstall.rdfが間違ってるんじゃないの?

39 :
デバッグ中はxpiにしなくても良い

40 :
じゃぁデバッグ中はchrome.menifestとかcontent.rdfは関係ないの?

41 :
関係ある。chrome.manifestとinstall.rdfは必須。
content.rdfなんてものは捨ててしまえ。

42 :
もっと素朴な疑問
そもそも拡張機能のデバッグってどうやってるの?

43 :
dumpでエラーを監視する

44 :
>>41
やってみる

45 :
chrome://hoge/content/hoge.jarって、「jar」で必須?
http://developer.mozilla.org/ja/docs/Building_an_Extension#.E3.83.91.E3.83.83.E3.82.B1.E3.83.BC.E3.82.B8.E5.8C.96
これだとjar圧縮は必要なくてrootディレクトリをzip→.xpiにリネームだけで済むらしい。
みんなどっち?

46 :
そもそもいろいろなことに目をつむれば圧縮する必要すらないわけだが。

47 :
jarは必須ではない。

48 :
>>45
圧縮しなくてもいいが圧縮(無圧縮ね)したほうがパフォーマンスがいい

49 :
jarにしない場合、
chromeFiles/content/xxx/
chromeFiles/skin/xxx/
っていうディレクトリ構成が一般的だが、chrome.manifestが正しければ
content/
skin/
でも問題ない。

50 :
>>49
その一般的って言うのはどこかで推奨されてる?
Greasemonkeyがそんな構成になってたと思うけど
そうする明確な理由があるなら知りたい。

51 :
>>50
chrome.manifestの指定に従ってるだけだから
別にどう作ってもいいんじゃね
拡張ごとにてんでバラバラじゃん
デフォルト値だけはdefaults/preferences/default.jsに決まっているみたいだけど

52 :
ファイルのドラッグ&ドロップに反応したいのですが、内部のjsファイルとXPCOM Referenceを見ながら探してもどうすればいいのか分からないのですが…
私ってダメな子なんでしょうか…orz

53 :
XULチュートリアルのドラッグ&ドロップの章を
見ながらやってみるといいと思う

54 :
ドラッグ&ドロップは、チュートリアルには難しいという
ことなのか、最近のものでは外れていますんで、
日本語訳を読みたいのなら MDC ではなく、旧訳の方をどうぞ...
ttp://xul-app.hp.infoseek.co.jp/xultu-janit/dragdrop.html

55 :
実際に使うのは多分これだね
ttp://xul-app.hp.infoseek.co.jp/xultu-janit/dragwrap.html

56 :
今までの流れです
XPCOM Reference でDrag and DropのAPI群を見つける
     ↓
これだけだと何のことか分からないのでjsファイルを全文検索
     ↓
nsDragAndDropを発見、さらに検索
     ↓
onDrop属性発見、onDrop="alert('Hello,Drop')"とか書いて試してみる、がなんか動かない
     ↓
ondragover="nsDragAndDrop.dragOver(event,textObserver)"とかやればいいのね、アラ、動かない。
     ↓
直しては試しながら、頓挫
というカンジでしたが>>44>>45あたりのリンクのおかげで解決いたしました。
なんというか、努力不足でした、スイマセン。

57 :
> というカンジでしたが>>44>>45あたりのリンク
54、55ですね

58 :
chrome://xxx/content/test.jsからchrome://xxx/content/file.txtのファイルを
読みたいのですが、ファイルパスを得るにはどのようにすればよいでしょうか?
nsIDirectoryServiceを使ってProfDからextensionsフォルダ、GUIフォルダと探った
としてもその先がわかりません。

59 :
>>58
ttp://piro.sakura.ne.jp/xul/tips/x0021.html
の後半でどうですか?

60 :
>>59
まさにそれでした。ありがとう。

61 :
nsIStringBundleServiceのcreateBundleと同じような感じで、JavaScriptから
DTDファイルのローカライズされた文字列の一覧を取得することは可能でしょうか?

62 :
pc8.2ch.net→pc10.2ch.net
なんか鯖移転したみたいだけど、pc8のほうにはまだdatが残ってるぽい。

63 :
imageタグで画像を表示したらなんか引き伸ばされちゃったんですけど。
cssでの指定はどうすればいいですか。

64 :
>>63脳みそ腐ってたごめん。解決した。

65 :
flexなbox内に配置した要素のサイズがboxに引きずられて拡大縮小してしまうんだけど、どうすれば防げる?
<vbox flex="1">
<image src="xxx.png"/>
</vbox>

66 :
>>65
http://developer.mozilla.org/ja/docs/XUL_Tutorial:Element_Positioning

67 :
>>66
さんくす

68 :
"@mozilla.org/process/ipc-buffer;1"
nsIIPCBuffer を使いたいのですが、自分で
作るしかないのでしょうか?

69 :
>>68
enigmail に入ってるやつ使えないかな

70 :
>>50
なぜ一般的か、っていうと、mozilla.orgの内部的な慣例ではそうなってるから、だね。
フォルダを一階層余分に付ける直接的な理由は、複数のパッケージを
同一のjarに入れたい場合があるから。
例えば、"example"という名前の拡張を作った場合、
example.jarの構成が、
content/foo/foo.xul
content/foo/foo.js
content/bar/barOverlay.xul
content/bar/barOverlay.js
で、アクセス方法が
chrome://foo/content/foo.xul
chrome://bar/content/barOverlay.xul
のような複合パッケージングがありうることを考えると、
「慣例」としては、一階層余分に付ける方が無難になる。
だって、chrome.manifestを
content foo jar:example.jar!/foo/
content bar jar:example.jar!/bar/
という風に書けるわけだから。
しかし、現実に拡張を作成する場合、そういう複雑なことをするよりは、
むしろjarを2つ作る方が便利だから、この慣例に従うメリットはない。
納得がいかなければ、en-US.jarとかを覗いてみると良くわかると思う。
まとめ
・jarに「しない」場合じゃなくて、jarに「する」場合のための慣例。
 (単に、解凍していない時のファイル構造を見る機会が少ない故の勘違いか)
 install.js時代は、インストールのスクリプトを書くのがすごく大変だったから、
 浅知恵でファイル構成を考えると、すぐインストール不可になっていたのも大きい。
・現状では無意味。

71 :
ttp://www.mozilla-japan.org/events/2006/fxdevcon/presentations/1a.pdf
これのScaling and rotationというスライドで紹介されているページの回転とかって
具体的にはどういう技術で可能になるのでしょうか?

72 :
cairo

73 :
じゃあ今のMinefieldでcairoをつかってTab Effect見たいなことできますか?

74 :
ところで
window {
background-color:transparent !important;
}
とやると、とたんに中身が全く表示されなくなるxul要素が結構あるみたいなんだが、これは仕様?バグ?それとも仕様という名のバグ?

75 :
>>74
それ 2.0.0.1 のバグじゃなかったっけ?

76 :
OSを作ってください><

77 :
>>75
あらら。Firefox2.0.0.2にあげたけど、ダメだったよ…。

78 :
>>77

79 :
>>77
仕様という名のバグとも言える仕様。
参考
ttps://bugzilla.mozilla.org/show_bug.cgi?id=70798
ttp://blog.goo.ne.jp/install-maido/e/ea4dfea9c04cea114c06f4c51fc891a8
ttp://level.s69.xrea.com/mozilla/index.cgi?id=20061224_API
ttp://maguroban.s41.xrea.com/diary/diary.xcg
まとめ
本来Fx3相当に入れるべき(?)patchを2.0.0.1に迷いながらも入れたので、特定のCSS指定でパフォーマンスの悪化、及び表示が狂うなどの現象が起きる。
このpatch自体は表現の幅を広げるが、告知がきちんと出来ていなかった為に一部のTheme職人がアタフタ。
拡張機能の互換性に関わるAPIの変更はマイナーバージョンでは入れないみたいだけど、Themeは無視ですか?その辺の認識を統一よろ。>開発者
Theme作者界隈ではそこそこの話題になったけどね。
機能として入ったものが引き起こした問題だから、2.0.0.1 - ALLが該当する。
個人的には、2に入れようが3に入れようが、Theme作者でmozilla.orgのアナウンスをこまめにチェックする人以外はどうせ同じ所でハマると思う。
今回はアナウンスがアレだったからね……。
それより俺はwindowの背景をtransparentして何がしたいのか聞きたい。

80 :
windowを透明にする
  ↓
背景画像を萌え絵にする
うっせー! なにかもんくあるかー!!

81 :
すいません。質問です。
有るウェブページをみていて、そのwebページのソースコードを取得したいんですが、
何か良い方法は有りますでしょうか?
例えば、有るページをみていてそこに書いてあるMozillaと言う文字を読み込んだ瞬間に
もじらみたいに変える方法を捜しているんですが良く分からないんです。

82 :
Grease Monkey でも使っとけ

83 :
>>82
Grease Monkeyではどのようにすれば取得できるのでしょうか?

84 :
理解できました。
すいません。

85 :
JavaScriptの呼び出しについての質問です。
overlay.xulというXULファイルがあって、
<?xml version="1.0"?>
<overlay id="helloworldOverlay"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<menupopup id="menu_ToolsPopup">
<menuitem id="helloworldMenuitem"
label="Hello, World!"
insertbefore="sanitizeSeparator"
oncommand="hoge();" />
</menupopup>
</overlay>
Hello, World!というメニューをクリックしたら、
同じcontentディレクトリのファイルhoge.jsの
以下のようなスクリプトを実行したいのですが、
どうすればoncommandで呼び出せるのでしょうか?
function hoge (){
window.alert("hogehoge");
}

86 :
scriptタグでインポート

87 :
>>86
idを使って呼び出すことは出来ないのでしょうか?

88 :
id?
何の話?

89 :
>>87
overlay.xulで<overlay〜の行の次に追加。もちろん、hogehogeはあくまで例だが。
<script type="application/x-javascript" src="chrome://hogehoge/content/hoge.js"/>
idが何を指すかはよく分からんが、もし相対パスでやろうとしてるなら止めとけ。
例えば、それをbrowser.xulにoverlayしてるんなら、
<script type="application/x-javascript" src="hoge.js"/>
という記述は次のように解釈される。(多分。テストはめどいのでしてない)
<script type="application/x-javascript" src="chrome://browser/content/hoge.js"/>
つまり、overlay先(ここではchrome://browser/content/browser.xul)を基準にした相対パスになる可能性があるので、素直に全部書いた方がいいよ。
で、俺も質問していいか?
hack本なんかには「chrome内のscriptではtype="application/x-javascript"にせよ」みたいな事が書いてあるけど何故?
古いバージョン(text/javascriptをサポートしないバージョン)の為だったらchrome.manifest形式のみの拡張とかにはいらんよな……と思ったんだがどうよ?

90 :
>>89
経験上、相対パスでおk

91 :
Firefoxで、ツールバーアイコンとか動的に表示が変わるタイプのアイコンは
chrome://browser/skin/Toolbar.pngみたいな集合体から
-moz-image-regionで切り出す場所を変えて使ってるケースが多いようだけど
これは各アイコンを別ファイルで持っておくより効率がいいんかな

92 :
アイコン画像がメモリ上に読み込まれるのはその要素が表示される
タイミングなので、hoverとかの状態ごとにファイルを分けてると
ボタンに最初にmouseoverした時にファイルの読み込みが発生して
一瞬真っ白なアイコンになってしまうので、その回避と思われ

93 :
なるほどthx

94 :
ファイルの数も抑えられるしファイルを1つ開いただけでエフェクトによる変化を見較べやすいのもあるんじゃないかと思った>画像

95 :
キャレットの色とか変える事できますか?
探しているのですがなかなかそれらしい物が見つからないのです

96 :
拡張ムズカシイぽ
でもがんばるぽ

97 :
defaults/preferences/の設定用JavaScriptの名前ってどうしてる?
俺は"defaults.js"にしてるけど知人は"prefs.js"にしてる。ちなみに俺は"prefs.js"なんてダサいと思うけど知人は"defaults.js"なんt(ry
で他人様の拡張機能ばらしたら(拡張機能名).jsが多いっぽい……。
何らかのガイドラインでもあるの?

98 :
>>97
<app install dir>/defaults/pref/*.js で
firefox.js, inspector.js, mailnews.js とかになってるからだろうな。
extensions/ 以下ならどうでもいいんだろうけど、
一応他と区別できる名前の方がいいんでないの?

99 :
>>9

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼
★初心者にVisual C++を教えるスレ★ Part38 (355)
電卓作る (216)
魁け! Ruby 1.9.X (293)
【C++】高速化手法【SSE】 (806)
強いAI(人工知能)ver0.0.1 (889)
自分の人生を1行プログラムにするスレ (345)
--log9.info------------------
【グラインドコア】リトバス【王者】 (333)
名古屋No1イベント、無線衝突 (394)
日本脳炎【BacillusBrains】 (320)
GOING STEADY   銀杏BOYZ 総合スレ  (674)
パンク、ハードコアの曲で印象に残った歌詞 (632)
宝島 DOLL 世代同窓会 (696)
ブルーハーツはたいしたことないよね (690)
THE VANDALS (859)
【【【【【LEATHERFACE】】】】】 (244)
女でパンクスって (275)
パンクスのデート (215)
不死身のタイマーズ Part.2 (832)
【アナーキー】椎名林檎【邦楽女性パンクス】 (209)
元ミッシェルのアベフトシ追悼スレ (331)
○お前らこのライブに行く勇気あんの?○ (287)
--愚童◆情熱全力疾走--   (930)
--log55.com------------------
【Lipton】 ティーソーダ スパークル 【Lipton】
サンガリアって 2ーにーさんがりあ
☆★☆ キリンレモン ☆★★ 
缶入りコーンスープについて語るスレ
【動いて】アクエリアス アクティブ・ダイエット【燃やせ】
コーラの炭酸を抜けないよう保存したい
【コカ】レモン→バニラ→○○コーラ?【ペプシ】
プリンシェイク