1 名前:デフォルトの名無しさん mailto:sage [2006/11/27(月) 20:00:38 ] オラ拡張作る。 XULはXMLベースのUI記述言語です。 Mozilla、Firefox、Thunderbird、Netscape等の Gecko系のソフトウェアために開発されました。 このスレはXUL、JavaScriptで利用できるXPCOM、 拡張の作り方などを主に話しあうスレです。 前スレ Mozillaでプログラミング(XUL) その2 pc8.2ch.net/test/read.cgi/tech/1102172958/ 姉妹スレ Geckoベースのブラウザを作ろう pc5.2ch.net/test/read.cgi/tech/1023546699/l50 参考サイト Mozilla Developer Center developer.mozilla.org/ XULPlanet www.xulplanet.com/ 過去スレ Mozillaでプログラミング(XUL) pc5.2ch.net/test/read.cgi/tech/1019704370/ >>2-50 あたりに関連リンク、近況などがあるかも。
331 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 17:25:18 ] パスみえとやらのソースをもらって解析してみればいいんじゃないでしょうか
332 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 18:05:05 ] quickware.a-quest.com/passmie/about.htm これか? 右クリックとか D&D にこだわらなければ楽だ。用途にもよるが
333 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 19:18:27 ] >>331 パスみえを解析してもXULプログラミングは出来ないと思います >>332 D&Dでドロップターゲットを取得するところまでが分かりません 右クリックは使用しません
334 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 21:07:03 ] 似たような拡張のコードは見たのか?普通にあると思うけど
335 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 11:06:18 ] developer.mozilla.org/Ja/DragDrop/Drag_and_Drop 汎用にするとしたらdragendでドロップ位置を取って座標で要素を取得すればいいと思ったけど Firefox 3.0.5で試してみたけどdragendではscreenX, screenYはどちらも0になるので難しそう。 Firefox上で表示されてるパスワード入力欄についてだけパスみえのように動作するアドオンを作りたいのなら こんな感じでどうだろう。 1.draggestureかdragstartイベントで以下の事をやる。 ・application/x-pasumie-targetのような独自の型でデータを登録する。 ・全ウィンドウの全フレームのパスワード入力欄に、この型のデータを受け取るdragdropかdropのイベントリスナを登録する。 2.ドロップ先要素のdragdropかdropのイベントリスナでドロップされたパスワード入力欄を特定して、パスワードを表示させる。 3.ドラッグ元要素のdragendで、全ウィンドウの全フレームのパスワード入力欄に登録したイベントリスナをremoveEventListenerする。
336 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 11:08:54 ] >全ウィンドウの全フレームのパスワード入力欄に 全ウィンドウの全フレーム だけでよかったスマソ
337 名前:330 mailto:sage [2008/12/22(月) 20:42:18 ] >>336 今回はまさにFirfox内の要素のみを対象として考えていました 大変分かりやすい解説をありがとうございました
338 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 19:15:35 ] コマンドラインのフロントエンドを作ろうとしてます。 nsIProcessだと実行しかできないようですが、 標準出力を拾う方法は無いでしょうか?
339 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 21:16:03 ] >>338 以前調べた限りでは www.mozdev.org/source/browse/enigmail/src/ipc/ にそういう機能があるらしいけど使ったことがないから何とも言えない。 https://bugzilla.mozilla.org/show_bug.cgi?id=68702 でこれをMozillaに入れるとか入れないとかしているみたい。
340 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 00:00:18 ] >>339 ありがとうございます。 連休にでも読んでみようと思います。 しかし、標準のままじゃできないんですね…
341 名前:デフォルトの名無しさん [2009/01/16(金) 15:03:56 ] contentフォルダにsample.xulとsample.jsファイルをいれてます。 sample.jsのプログラムがうまく動きません。他に必要なファイルがあれば教えてください。
342 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 04:47:13 ] try { Components.classes["@mozilla.org/browser/sessionstore;1"] .getService(Components.interfaces.nsISessionStore) .persistTabAttribute('hoge'); } catch (e) { } browser.sessionstore.enabled が false のときエラーになると聞いて try-catch したのに どっちにしろ謎のエラーが・・・ ちゃんと pref 見ないとだめか
343 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 01:14:09 ] ttp://hg.mozdev.org/verbosio/file/cfde69c5c5d1/mozilla/verbosio/core/modules/FileCommon.jsm こーゆーモジュールをガシガシ書いてもらって標準化してほしいぜ(それなんて jslib FUEL はいったい何を目指しているのか…このスレを加速させる燃料にもならないぜ…
344 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 17:12:42 ] FUELはただのラッパだよ。正露○じゃないよ。
345 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 23:53:32 ] そういえばFirefox 2系が公式にサポート切れたからFUELがんがん使ってももう問題ないんだな
346 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 20:56:31 ] そういう問題じゃないだろ
347 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 20:58:30 ] なんで mozcrt19.dll 存在するの?
348 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 00:45:29 ] malloc を書き換えてるから。詳しくは firefox jemalloc でググれ
349 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 23:52:54 ] >>348 勉強になったよ
350 名前:デフォルトの名無しさん [2009/02/10(火) 15:19:59 ] 履歴を表示できるのですが、その表示されたURLをクリックしてもそのサイトに移動しません。 HTML要素を追加したがうまくできないです。誰か教えてください。
351 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 01:24:08 ] まず質問を他人にも理解できる日本語で書き直してください 次にスレッドタイトルを読み、質問するのに適切なスレッドであったか確認してください
352 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 01:47:41 ] 真性だな、こりゃwww
353 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 00:07:25 ] StorageのAPI使ってplaces.sqliteから情報を取り出す処理を書いています。 Firefox3.0ではopenDatabaseで新規に接続ハンドルを作る必要があると思いますが、 作った接続ハンドルは用がなくなったらすぐにcloseした方がいいですか? それとも次回使うときのためにポインタを保持しておいても問題ないですか?
354 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 22:32:58 ] places.sqlite のDBハンドルを close すると bookmark が追加変更できなくなったりしない? 保持してても問題ないと思う。
355 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 00:59:58 ] Firefox3.1だとAPIによってハンドルが一本化されているので、 closeするとブックマークが使用できなくなりますね。 ありがとうございました。
356 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 00:17:03 ] コマンドラインから firefox.exe -chrome "c:\app.xul" とすれば単体でXULアプリとして起動できますが このとき以下のようにxulファイル以外の引数を同時に渡し、 firefox.exe -chrome "c:\app.xul" "hoge" "foo" "bar" app.xul内でwindow.arguments[n]としてアクセスできませんか? window.arguments.lengthはなぜかいつも5で、中身は全部nullです。
357 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 03:08:27 ] っ[ https://developer.mozilla.org/ja/Chrome/Command_Line ]
358 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 12:09:01 ] >>357 あーまさにこれです。 ありがとうございました
359 名前:デフォルトの名無しさん [2009/02/18(水) 18:40:51 ] 履歴をツリー状に表示するアドオンもしくはそのようなサンプルプログラム を載せているサイトを教えてくださるとうれしいです。
360 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 18:48:58 ] 履歴をツリー状にって・・・Firefox自体のコード見たらいいんじゃないの? サイドバーとかブックマークの管理とか
361 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 04:04:14 ] -no-remoteで別インスタンスで起動しているウィンドウ間で データをやりとりする方法ってありませんでしょうか?
362 名前:デフォルトの名無しさん [2009/02/26(木) 16:24:22 ] 現在開いてるwebページのURLを取得して表示させるプログラムをXULでつくりたい のですが、何か良い参考サイトやプログラムありませんか?
363 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 02:24:19 ] Firefoxのロケーションバー
364 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 13:23:47 ] >361 ソケット通信使うのが正道だと思う >362 Firefoxのメインウィンドウの中なら gBrowser.currentURI.specかcontent.location.hrefで 今開いてるページを取れる
365 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 16:36:15 ] Firefox3で終了なのか再起動なのかはどうやったら判定できますか? quit-application-granted 時に 終了か再起動かで処理を分岐させたいのですが
366 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 20:53:32 ] mxr.mozilla.org/mozilla-central/source/toolkit/components/startup/src/nsAppStartup.cpp#306 quit-applicationの方のdataで判別できるみたいだよ
367 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 02:01:36 ] >>366 できました。 本当にありがとうございました!
368 名前:デフォルトの名無しさん [2009/03/05(木) 14:24:48 ] ブラウザやwebサイトの読み込み完了時にスクリプトを処理するにはどうすればいいですか? xulファイルに window.onload = "aaaa();" //aaa();は作った関数 と記述したのですがうまく動作しません
369 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 15:27:48 ] >>368 JavaScript本を買って一から勉強し直してください
370 名前:574 [2009/03/05(木) 22:56:18 ] 正解は window.onload = aaaa; しかし、この次元で躓いているとXUL関連やFIrefoxの拡張は敷居が高いよ。 まだまだマニュアルや情報源の情報源の十分に整備された世界ではないから…
371 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 00:30:14 ] From: [370] 574 <> みっ、みらいじんだー。 もしかしたら、これを期に勉強して成長した、未来の>>368 が、 自らを叱咤激励するために、書き込んだのか〜?
372 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 19:13:32 ] nsILocalFileのdirectoryEntriesのgetNext()で取得できる ファイルエントリの順番って保障されてますか?
373 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 22:24:07 ] いいえ。
374 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 00:49:43 ] >>373 ありがとうございます
375 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 09:14:18 ] Firefox3のProfileManagerに アドオンから改造を加えることって可能?
376 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 08:50:18 ] Windowsの自作アプリケーションから、「現在起動中の」Firefox3にクッキーをセットしたいのですが、 どうしたらできるでしょうか? IAccessible->IServiceProvider->ISimpleDOMDocument->IDOMHTMLDocumentで余裕とか考えていたのですが、 XPCOMがCOMじゃないということに気が付くのに丸2日かけてしまいましたorz IEばかり使ってきたのでよくわかかりません…
377 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 08:53:29 ] あっ、XULの話題のスレみたいなので他所行った方がいいのかな
378 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 18:26:38 ] 正攻法だと無理かも。
379 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 18:43:36 ] IServiceProviderでnsSupportsは取れるみたいなんですが nsSupports以外の何物でもありませんでした…ダメか…
380 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 12:18:34 ] >>379 nsSupports.QueryInterfaceしてキャストでいけない?
381 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 15:18:54 ] ひょっとしてFirefoxのsqliteはメモリ上にデータベース作成できない?
382 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 21:48:18 ] mozIStorageService.openSpecialDatabase("memory")
383 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 16:04:11 ] >>382 ありがとうございます。 openDatabase(null) でもいけるみたいですね。
384 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 04:30:25 ] nsIFileでファイルのlastModifiedTimeは書き換えできますが ディレクトリのlastModifiedTimeは書き換え不可なのでしょうか? 必ず例外NS_ERROR_FILE_ACCESS_DENIEDが発生します。 パーミッションは確認しましたし そのディレクトリを使用中なわけでもありません。 具体的にやりたいのは 新規ディレクトリ、もしくは既存のディレクトリの lastModifiedTimeを任意の値に変更する ということです。
385 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 07:44:36 ] ttp://mxr.mozilla.org/mozilla-central/source/xpcom/io/nsLocalFileWin.cpp#1894 ttp://mxr.mozilla.org/mozilla-central/source/xpcom/io/nsLocalFileUnix.cpp#994 ttp://mxr.mozilla.org/mozilla-central/source/xpcom/io/nsLocalFileOSX.mm#844 実装を見ればどこに原因があるか分かるかも?
386 名前:384 mailto:sage [2009/03/24(火) 10:22:49 ] >>385 とりあえずわかったことはWindows限定の問題だということです。 Ubuntu8.10とLeopard10.5.2では書き換え可能でした。 Win2000SP4/WinXPSP3/WinVista(SPなし)とWin7で同じく ディレクトリのlastModifiedTime書き換え試行時に NS_ERROR_FILE_ACCESS_DENIEDが発生します。 Firefox3.0.7で実行しています。 提示されたソースのほうはC++が書けないので なんとなくしか理解できず原因を特定するのは難しそうです。 何か試してみた方がよさそうなことはありませんか?
387 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 22:33:16 ] >>385 ディレクトリの時刻を変更するには、CreateFile()でFILE_FLAG_BACKUP_SEMANTICSを 指定する必要があるが、それがないから無理だな。
388 名前:384 mailto:sage [2009/03/25(水) 00:44:38 ] >>387 つまりLinux版やMac版ではFILE_FLAG_BACKUP_SEMANTICSがあるけど Windows版ではそれがないのでディレクトリ更新時刻は書き換え できないということですか? なぜWindows版だけそんな仕様に・・・?
389 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 01:34:30 ] >>388 そういうレベルの話ではない。 更新時刻の変更はOSによってやり方が全然違っていて、CreateFile()云々は Windows固有のやり方。それに加えて、WindowsではUnixとは異なり、 ファイルと同じ方法ではディレクトリの更新時刻は変更できない。
390 名前:384 mailto:sage [2009/03/25(水) 01:45:04 ] >>389 なるほど。では結論として、 Windows上のXULアプリからはディレクトリの lastModifiedTimeは変更できない と考えて問題ありませんか? 妥協策としてnsIProcessでWindowsアプリをrunして変更する といった方法で対応するしかないという理解でいいでしょうか?
391 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 10:40:54 ] 興味本位で聞くけどそもそも何故ディレクトリの更新時間を変更したいの? それって本当に必要なの?
392 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 12:47:18 ] >>391 2つのディレクトリ間の同期をとる処理を書いています。 それでディレクトリの更新日時まで同期したいわけですが
393 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 22:54:41 ] ディレクトリの更新日時なんてOSどころかファイルシステムによっても 扱いが異なるからあんまり当てにならないよな。 例えばFATだと基本的には 更新日時=作成日時 だが、NTFSはそうではないし。
394 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 18:28:48 ] >>380 すべてのnsXXXで試したけど無理でした Firefoxのソース見るとやはりISimpleXXXしか返していなかったので IServiceProvider.QueryInterface(nsSupports)が成功するのはWindowsのバグかも?
395 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 16:58:24 ] >>394 nsSupports.QueryInterface(nsIXXX)
396 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 19:23:55 ] >>395 それが失敗するという話
397 名前:デフォルトの名無しさん [2009/04/11(土) 11:03:08 ] mozIStorageServiceのopenDatabaseでデータベースの接続を開始できますが、 逆にデータベースの接続を終了させるメソッドがありません。 openDatabaseの戻り値への参照が破棄されるタイミングで自動的に接続が終了され、 明示的に終了する必要は無いということでしょうか?
398 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 23:37:21 ] mozIStorageConnectionにcloseがあるように見えるけど
399 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 21:55:29 ] >>398 すみません、その通りでした。 mozIStorageServiceのほうしか見ずに言ってしまいました。
400 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 23:09:12 ] JavaScriptのXPCOMで引数があってもなくても良いようなメソッドを定義することはできますか? IDLでvoid test([optional] in string arg);と定義しても、引数無しでメソッドを呼び出すと、 NS_ERROR_XPC_NOT_ENOUGH_ARGSで怒られます。
401 名前:デフォルトの名無しさん mailto:sage [2009/04/19(日) 02:12:33 ] モーダルダイアログを開いている親のウィンドウを、ダイアログも含めて閉じることはできますか?
402 名前:デフォルトの名無しさん mailto:sage [2009/04/21(火) 02:06:59 ] できるかできないかで言えばもちろんできますよ
403 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 22:00:50 ] 401 じゃないけどダイアログウィンドウってどうやってアクセスしたらいいの? getElementsByLocalName 的な関数があればいいんだけど
404 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 03:01:22 ] ダイアログウィンドウのDOMWindowならnsIWindowMediatorで取れるよ
405 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 23:38:53 ] >404 ありがとう調べて見る
406 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 10:20:45 ] XPCOMのC++で書いたサンプルないですか? このあたり見てますがうまくいかない・・・ firefox.geckodev.org/index.php?XPCOM%E3%81%AE%E4%BD%9C%E6%88%90 takedarts.jp/index.php?XPCOM%A4%CE%B3%AB%C8%AF
407 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 12:45:24 ] XPCOM使ってるAddonを片っ端からダウンロードして、 ソース入りのやつを拾い出せばいいんじゃない?
408 名前:デフォルトの名無しさん mailto:sage [2009/06/15(月) 01:12:30 ] >>406 どこで詰まってるのか書かないと適切なアドバイスはできないよ
409 名前:デフォルトの名無しさん [2009/06/18(木) 15:30:08 ] 履歴から特定のドメインにマッチしたものだけを削除する方法を教えてください
410 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 16:06:56 ] >>409 お前ウザいけど文盲なのか?白痴なのか? Mozilla Firefox質問スレッド(初心者歓迎)の91 pc12.2ch.net/test/read.cgi/software/1244730199/232 232 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2009/06/17(水) 04:45:36 ID:tn9rfOTe0 前スレでレスが付かなかった為、再度質問させてください。 【質問】 ・ 指定したサイト(ドメインか下層ディレクトリ指定)のみ履歴を残したいのですが、 それ以外を削除するアドオンもしくは、指定したサイトのみ履歴を残すアドオンを 探しています。 【UserAgent】 ・ Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729) 【導入しているプラグインとそのバージョン】 ・ Adobe Acrobat ・ IE Tab Plug-in ・ Mozilla Default Plug-in ・ Shockwave Flash 【導入している拡張とそのバージョン】 ・ Flashblock 1.5.10 ・ IE Tab 1.5.20090207 ・ Tab Mix Plus 0.3.7.3 【使用しているテーマ】 ・ Default 3.0.10 ご存知の方いましたら、教えてください。 よろしくお願いします。
411 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 16:21:08 ] そのレスは「それ”以外”を削除」「指定したサイト”のみ”履歴を残す」 と言ってるので「マッチしたもの”だけ”を削除」と言ってる>>409 とは意味が真逆 なので文盲は>>410
412 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 16:28:00 ] 質問もいい加減だよな, 対象としているクライアントがなにかサッパリだし
413 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 17:45:10 ] >>410 お前ウザいけど文盲なのか?白痴なのか?
414 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 15:39:28 ] test
415 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 15:46:40 ] 前スレにも出てましたが、URLからHTMLDocumentオブジェクトって生成できないんでしょうか? 前スレで解決してた方は@mozilla.org/webshell;1を使って生成していたようですが、 xpcshellでwebshell.loadURIを叩くと落ちてしまいます。 xpcshell上でオブジェクトを生成したいのですが何か案はないでしょうか?
416 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 20:46:13 ] これか? mxr.mozilla.org/firefox/source/browser/components/microsummaries/src/nsMicrosummaryService.js#2098
417 名前:デフォルトの名無しさん [2009/08/14(金) 05:33:25 ] firefoxアドオンを作成しています。HelloWorldしか作ったことがありません。 onload,onmouseover等のイベントをアドオンから強制的に発行できる方法があったら教えていただけると嬉しいです。
418 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 06:02:18 ] >>416 iframeにソース突っ込むタイプですね。 既存のwindowオブジェクトを探して、そこから iframeを新たに作成するようですが、そもそもxpcshell上には、 windowオブジェクトが存在しません。(xpcomから探しても無い。。。) やはり、xpcshell上からの作成は無理なのでしょうか。。。
419 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 07:28:12 ] >>418 あー、そういうのがあるのか XUL より下はワカンネ
420 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 08:49:57 ] >>419 ありがとうございました。 他にもirc.mozilla.orgで聞いてみましたが無理じゃね?って言われましたorz
421 名前:417 mailto:sage [2009/08/14(金) 20:04:01 ] 自己解決しました。 ソースコードからイベントに呼ばれる関数を拾ってきました。 失礼しました。
422 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 16:44:49 ] 今、WindowsでXULアプリをxulrunnerで作るとしたら、お勧めIDEって何がありますか?
423 名前:DownloadWithCravingExplorer.uc.xul [2009/08/28(金) 14:43:02 ] <?xml version="1.0" encoding="UTF-8"?> <overlay id="CravingExplorer" xmlns="www.mozilla.org/keymaster/gatekeeper/there.is.only.xul "> <script type="application/x-javascript" xmlns="www.w3.org/1999/xhtml "> <![CDATA[ function downloadWithCravingExplorer() { var craving = new ActiveXObject( "CravingExplorer.Api" ); if ( craving != null) craving.addDownloadItem( gContextMenu.linkURL, "flv", true ); } window.setTimeout(function() { var contextMenu = document.getElementById("contentAreaContextMenu"); contextMenu.addEventListener("popupshowing", function(event) { if (event.target != this) return; gContextMenu.showItem("id-CravingExplorer", gContextMenu.onLink); }, 0); }); ]]> </script> <popup id="contentAreaContextMenu"> <menuitem id="id-CravingExplorer" label="Craving Explorerでダウンロード" accesskey="D" oncommand="downloadWithCravingExplorer();" /> </popup> </overlay>
424 名前:DownloadWithCravingExplorer.uc.xul [2009/08/28(金) 14:50:30 ] >423のような感じで ActiveXObject経由でローカルアプリのAPIをコールしたいんですけど、 やっぱりfirefoxではActiveXを使用するのは無理なんでしょうか? (上記を実行させると当然"new ActiveXObject"のところで"in not defined"になります) この辺もインストールして実行してみましたが、結果は同じでした。 code.google.com/p/ff-activex-host/ ちなみに上記のxulは リンクの右クリックメニューに 「CravingExplorerへその動画をダウンロードする」タスクを追加する コマンドを追加します。
425 名前:DownloadWithCravingExplorer.uc.xul [2009/08/28(金) 14:53:33 ] >>424 ×:in not defined ○:is not defined
426 名前:DownloadWithCravingExplorer.uc.xul [2009/09/02(水) 23:04:17 ] >>423-425 自己レス。 コマンドラインで引数を受け取ってローカルアプリのAPIをコールするexeを自作して、 それをxul内のスクリプトからprocess.runで呼び出す方法でとりあえず解決しました。
427 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 15:40:50 ] 質問です。Thunderbird用にアドオンを作り、そこからFirefoxで 表示しているページのdocumentオブジェクトにアクセスすることは できますか? たとえばTunderbird上に届いたあるメールのヘッダの特定の文字列を Firefoxに表示しているページのフォーム上のあるinputに入れるとか。
428 名前:デフォルトの名無しさん [2009/11/11(水) 23:24:56 ] ffやthunderbirdとは関係ないStandaloneなアプリをXULで開発しようとする場合に 一番参考になる書籍ってなんでしょう?
429 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 23:38:20 ] >>428 >ffやthunderbirdとは関係ない 釣り?文盲?白痴?
430 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 01:14:05 ] fxなんて数あるGecko搭載アプリの一つでしかねーぞ。
431 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 04:14:24 ] >>428 和書だとFirefox関連しかないみたいだし、 洋書でもEssential XUL Programmingくらいしか見つからなかった 現状では一番参考とかいうレベルではなく、それくらいしか選択肢無いみたい それよりはXULRunnerで動いてるソフトのソースを見た方が参考になると思う ja.wikipedia.org/wiki/XULRunner の動作するアプリケーション等を参考に >>429 無知は罪じゃないから安心していいよ そもそも>>1 にちゃんと説明は書いてあるんだけどね
432 名前:デフォルトの名無しさん [2010/02/07(日) 19:04:19 ] 質問をさせてください。 Firefoxでロケーションが変わるたびにサイドバーに 表示しているxulコントロールの要素の値を変更させるものを作りたいと思っているのですが、 その設定の方法は window.top.document.getElementById("sidebar-box").getElementById("コントロール名").setAttribute(要素名, 設定する値); で良いのでしょうか?
433 名前:432 [2010/02/07(日) 19:19:55 ] すみません、上記の方法で試してみたところうまく動いてくれませんでした。 正しい方法についてご教授願いたく思います。
434 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 11:45:27 ] >432 サイドバーの内容はサブフレーム扱いだからそれでは動かないと思う そのスクリプトが動いてるのはbrowser.xulの名前空間? それともサイドバー内の名前空間? browser.xulの名前空間なんだったらこう。 document.getElementById("browser").contentDocument.getElementById("myControl").setAttribute("attributeName", "value");
435 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 11:54:49 ] すまん間違えた document.getElementById("sidebar").contentDocument.getElementById("myControl").setAttribute("attributeName", "value");
436 名前:432 [2010/02/09(火) 23:46:16 ] >435 ありがとうございます。 しかし試してみましたが期待した動作をしてくれませんでした。 名前空間についてですが、まだそこまでの理解をしておらず、調べながらになりますが、 <overlay id="sidetempOverlay" xmlns="www.mozilla.org/keymaster/gatekeeper/there.is.only.xul "></overlay> 内にスクリプトがあります。名前空間はこのxmlns要素内の事でよろしかったでしょうか? 連続の質問で大変申し訳ありません。
437 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 00:07:59 ] >>436 その<overlay>は何をオーバーレイしてるの? browser.xul? 別の物?
438 名前:432 [2010/02/10(水) 00:51:45 ] オーバーレイをしているファイル内では以下のように記述しています <?xml version="1.0"?> <overlay id="sidetempOverlay" xmlns="www.mozilla.org/keymaster/gatekeeper/there.is.only.xul "> <script type="application/x-javascript" src="locationchange.js"></script> <menupopup id="viewSidebarMenu"> <menuitem observes="side_with_page" /> </menupopup> <broadcasterset> <broadcaster id="side_with_page" label="SIDEBAR" autoCheck="false" type="checkbox" group="sidebar" sidebartitle="SIDEBAR" sidebarurl="chrome://sidebar/content/side_content.xul" oncommand="toggleSidebar('side_with_page');"/> </broadcasterset> </overlay> [表示]→[サイドバー]に表示するボタンと、 それを押すことで表示されるサイドバーです。 サイドバー内には独自に作ったxulが入るようになっています。 これでbrowser.xulを書き換えていると言うことなのでしょうか。
439 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 20:00:36 ] それなら>435でサイドバー内にアクセス出来ると思うんだけどな。 ↓にもそう書いてあるし。 ttps://developer.mozilla.org/en/Code_snippets/Sidebar#Accessing_the_sidebar_from_a_browser.xul_script 「期待した動作をしない」ってのがどういう状況なのか分からないのでなんとも。 そもそも、ロケーションの変更でサイドバーの内容を書き換えるなら、 サイドバーのスクリプトからtabbrowserにProgress Listenerを追加するのが普通だと思うんだが。 ttps://developer.mozilla.org/ja/Code_snippets/Progress_Listeners
440 名前:439 mailto:sage [2010/02/10(水) 20:12:46 ] あ、ProgressListenersの方のURLはサイドバー関連は書かれてないや。間違って張ってしまった。
441 名前:432 [2010/02/10(水) 23:33:52 ] >サイドバーのスクリプトからtabbrowserにProgress Listenerを追加するのが普通だと思うんだが。 一度そうしようとしたことがあるのですが、 <overlay>内でJavaScriptファイルのインポートを記述した場合、 自動でスクリプトが実行されているのか、リスナーに追加されていたのですが、 <window>内でJavaScriptファイルのインポートを記述した場合、 リスナーに追加されていないようでした。 <window>でonload属性でスクリプトを動かせば良いのかと思い試したのですが、 <window>外にインポートの記述をしたところ、エラーを吐かれてしまいました。 以下がエラー文です 「XML パースエラー: ドキュメント要素の後ろに不正な文字列があります。」 サイドバーのスクリプトからリスナーを追加する方法を教えていただきたいです。 長々と質問を続けて大変申し訳ありません。
442 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 00:06:38 ] <window onload="init();" onunload="uninit();"> <script type="application/x-javascript" src="progress.js"/> </window> で、progress.jsに function init() { top.gBrowser.addProgressListener(〜 って書けばいいと思うんだが。
443 名前:432 [2010/02/11(木) 00:37:03 ] >>442 試してみました、しかしどうも動いてくれません。 ちなみにサイドバーのスクリプト内で document.getElementById("sidebar").contentDocument.getElementById("myControl").setAttribute("attributeName", "value"); を動かしてみたところ、コントロールの要素の値は変更されていませんでした。
444 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 01:07:47 ] いやいやいや、そりゃサイドバーのスクリプトから見たら document.getElementById("sidebar").contentDocument が存在するわけないでしょ。もうすこし冷静になって考えようよ。 あと、「動かない」だけじゃなくて、どこまで出来てて、どこから出来ないのか、 どこで詰まっててどういうエラーが出るのか、ちゃんと自分で把握して説明しないと、 エスパーでもないかぎりアドバイスしようがないよ。
445 名前:432 [2010/02/11(木) 03:10:22 ] 申し訳ありません、確かにその通りでした。 ところで急展開申し訳ないのですが、 現在期待した動き(ロケーションが変わったときにサイドバーのコントロールの要素が変更される) が動きました。 どうやらaddEventListenerをしていなかったのが原因だったようです。
446 名前:432 [2010/02/11(木) 03:14:07 ] JavaScriptのソースは以下のとおりです (locationchange.js) const STATE_START = Components.interfaces.nsIWebProgressListener.STATE_START; const STATE_STOP = Components.interfaces.nsIWebProgressListener.STATE_STOP; var bgipeo_Listener = { QueryInterface: function(aIID){ if (aIID.equals(Components.interfaces.nsIWebProgressListener) || aIID.equals(Components.interfaces.nsISupportsWeakReference) || aIID.equals(Components.interfaces.nsISupports)) return this; throw Components.results.NS_NOINTERFACE; }, onStateChange: function(aWebProgress, aRequest, aFlag, aStatus){ if(aFlag & STATE_START){} if(aFlag & STATE_STOP){} return 0; }, onLocationChange: function(aProgress, aRequest, aURI){ document.getElementById(コントロール名).setAttribute(要素名, value); return 0; },
447 名前:432 [2010/02/11(木) 03:15:04 ] 続き onProgressChange: function() {return 0;}, onStatusChange: function() {return 0;}, onSecurityChange: function() {return 0;}, onLinkIconAvailable: function() {return 0;} } function init(){ top.gBrowser.addProgressListener(bgipeo_Listener, Components.interfaces.nsIWebProgress.NOTIFY_STATE_DOCUMENT); } function uninit(){ top.gBrowser.removeProgressListener(bgipeo_Listener); } var myExtension = { init: function() { top.gBrowser.addProgressListener(Listener, Components.interfaces.nsIWebProgress.NOTIFY_STATE_DOCUMENT); }, uninit: function() { top.gBrowser.removeProgressListener(Listener); } }; window.addEventListener("load", function() {myExtension.init()}, false); window.addEventListener("unload", function() {myExtension.uninit()}, false); サイドバー <window onload="bgipeo_init();" onunload="bgipeo_uninit();"> <script type="application/x-javascript" src="locationchange.js" /> </window>
448 名前:432 [2010/02/11(木) 03:20:43 ] 親切にお答えいただき誠にありがとうございました。 また大量の投稿大変申し訳ありませんでした。 次からは皆様のお役に立てればと思います。 では失礼いたします。