第六回Mozilla拡張機能勉強会まとめ
と言う訳で
本日、第六回Mozilla拡張機能勉強会が行われたので、折角メモを取ったので書いてみるです。
ちなみに寝坊しましたので、メインの話は半分くらいしか聞けてないですw
あと、割と飲んでたのでその辺りを勘案して巧みにスルー力を発揮して読んでいただけると幸いです。
Web系の人はみんな遅刻したです。
Firemacs (山本さん)
C-sの検索
Firefoxの左下に検索のエリアが出るけど、その検索をC-sでやりたい。
その検索に入る際にstatusに文言を出したい。(I-searchみたいなの)
普通なら、
window.status = "I-search";
みたいに出来るけど拡張の世界じゃ出来ないので、代替手段として、
document.getElementById("statusbar-display").label = "I-search";
こんな感じでやる。
とりあえず、デフォのFirefoxでid属性がついてる主要な要素のまとめとか多分どこかにあると思うけど、どう考えてもBK以外の何者でもない。
commandに対する引数の話
commandってのがあるんだけど、これって引数が渡せない。
そこで、nsICommandController, nsICommandParamsを使う。
isCommandEnable()で指定したコマンドが実行可能かどうかが分かる。
検索の部分
gFindBarで取れる。ってかgなんちゃらって大杉無いか?w
repl> repl.search(/^g[A-Z]/, window); gNavigatorBundle gCZPanMouseY gCZPanMouseX gCZStatusBarFormat gCZEyedropperLaunchTimerID gCZSavedStatus gShorcutKeyName gCZPrevSelectedY gCZPrevSelectedX gCZSelectedElementBackupStyle gCZSelectedClientY gCZSelectedClientX gCZSelectedElement gCZSelectedY gCZSelectedX gCZLastStatusValue gCZSelectedColor gCZComponent gCZIOUtils gCZCustomPaletteUI gCZClickListener gCZPref gCZPrefService gYBLoginWindow gYBObservService gYB_loadFavIconOld gYB_loadFavIconNew gYB_saveIcon gYB_getMimeType gYB_b64 gYB_rscIcon gYB_rdfs gYB_bms gYBXUL_NS gYBrscBundleRoot gYBrscBundleValue gYBrscBundle gYBrscLastVisitDate gYBrscVisitCount gYBrscTag gYBrscTagValue gYBrscUrl gYBrscGenTitle gYBrscName gYBRdfService gJavaConsole1_6_0_02 gOrigName gCancelLabel gSavedName gHideElmParam gThisWinClosedtabs gThisWinTabs gThisWin gSessionPath gRDFRoot gBackupLabel gTab gFirefox2DefaultTheme gSingleWindowMode gTabbarPosition gObserver gURIFixer gWindowManager gIOService gAutoReloadDialogAccepted gChromeDir gIsPlaces gIsFirefox2 gIsOldBrowser gPref gViewSourceUtils gMissingPluginInstaller gWebPanelURI gHomeButton gXPInstallObserver gPopupBlockerObserver gSessionHistoryObserver gGoButtonPrefListener gAutoHideTabbarPrefListener gURLBarAutoFillPrefListener gSanitizeListener gChromeState gContextMenu gSidebarCommand gBrowser gPrefService gProgressCollapseTimer gProgressMeterPanel gMustLoadSidebar gClickSelectsAll gHaveUpdatedToolbarState gLastValidURL gLastValidURLStr gIsLoadingBlank gProxyDeck gProxyFavIcon gProxyButton gURLBarContainer gURLBar gPrevCharset gLastBrowserCharset gCharsetMenu gPageStyleButton gURIFixup gGlobalHistory gRDF gBrowserGlue gBkmkTxnSvc gBmProperties gNC_NS_CMD gXUL_NS gRDF_NS gWEB_NS gNC_NS gBidiUI gSavePrintSettings gPrintSettingsAreGlobal gFindBar gTraceOnAssert
とりあえず僕の実行結果。
あと検索フィールド自体は、
document.getElementById("find-field");
って事でid属性としてfind-fieldを指定すれば取れる。
キーイベントの奪い方
Firemacsで一番面白い話。
eventの奪い方
captureフェーズで奪って、stopPropergation(), preventDefatult()でOK
accesskeyで割り当てられてる場合
accesskey属性を持っている要素からaccesskey属性を消せばOKかと思いきやそれでは駄目。
要素ごと差し替えが必要なので、
- accesskey属性を持つ要素を抽出
- removeAttribute("accessskey")
- cloneNode()して、親からreplaceChild()すると指し換わる
と言う手段をとる。
キー割り当てとpreference
この辺りはPiroたんが詳しく解説してくれる予定。
nsIPrefBranch辺りを上手く使えばスマートに書ける。
XULRunner - WidgetRunnerの紹介 (id:smellman)
組長の発表。20after4って人がWidgetRunnerってのを作ってる件。
- http://www.developerfriendly.com/projects/WidgetRunner
- http://d.hatena.ne.jp/smellman/20070726/1185463796
多分ここらへん。
- Extension Managerを再利用してる
- まだ不安定
なんだけど、ガジェットのランタイムのようにして使えるところは凄い注目。
XULRunner系だとSSB(Site Specific Browser)としてWebRunnerが最も注目されてる。
設定ファイルは標準で入ってて、.webappって拡張子である。
大体内容はiniファイルっぽぃ感じ。
Google Calendarとかの設定ファイルとかあるんで、内容見てとりあえず感覚は掴むべし。
でダウンロード出来るお。
XUL preLoader (by mar's)
overlayするときにid属性が振られていない要素があったらどうする?と言う話。
普通ならchrome.manifestで指定したxulでoverlayしたい要素をつらつら書くんだけど、
そうじゃない場合はjsで制御する。
でもjsで書いた途端、イリーガルな処理になって萎える。
それpreLoaderで出来るよ。
ざっくり言えばchrome.manifestで指定するファイルをpreLoader.xulにして、
その中でoverlayしたい要素とか一切書かずに、jsだけ書く。
そこで本来overlayしたい要素にidつけてから、jsでloadOverlay()して、本来chrome.manifestからoverlayしたいxulを指定して終了。
って説明で大体分かる?w
辺りの話も興味深かった。
後で調べる。
まとめ
凄い面白かった。特にFiremacsの内容はとても初心者向けだったし、
山本さんの苦心の程は伺い知れて良かったです。
あとid:nagayamaがMozillaの何かで協力してくれるらしい。
もっとノウハウは共有しなきゃですな。
あと飲み会も面白かったし、会いたい人にも会えた。
飲み会で周りがドン引きするぐらい、Piroたんと話したんだけど、その内容は濃かった。
成果は追々出る予定でございます。
まったくまとまってないけど気にしない。