Home > Tags > XUL

XUL

ページ読み込み完了前にgBrowserオブジェクトにアクセス出来てしまう

引き続きFirefoxの機能拡張を作ってるんだけど、不思議な現象に遭遇した。

Firefoxを初回に起動したときにはgBrowserが定義されているのに、二度目に起動したときにはgBrowserが未定義となる。このことに気がつかずに、ちょっとハマってしまったのでメモ。

続きを読む

XULでJavaScriptを含むUIをオーバーレイさせるときの注意点

Firefoxの拡張機能を作る時、UI部品をオーバーレイすることでFirefoxの画面内にボタンを追加したり、既存のUIにスクリプトを追加したりすることができる。

で、さっきブラウザのBackとForwardの隣にあるボタン、back-forward-dropmarker(下記の画像のように、押下するとこれまでのページ遷移履歴のリストが出てくる。)に対して操作したときに、スクリプトを実行させようと思ってXULのオーバレイを作っていたんですが、どうにもうまくいかない。具体的には、XUL内に書いたJavaScriptが実行されていない。

image

で、なんでかなーと思って悩んでたんですが、無事に解決したのでメモ。

最初に書いていたオーバレイさせるコードはこんな感じ。

<toolbarbutton id="back-forward-dropmarker" type="menu" chromedir="ltr"
      disabled="true" tooltiptext="最近表示したページ"
      onbroadcast="if (this.disabled) this.disabled =
      document.getElementById('Browser:Back').hasAttribute('disabled') &&
      document.getElementById('Browser:Forward').hasAttribute('disabled');">

でも、これじゃぁ、上手く実行されない。なんでだろう?と考えてみたところ、もしかしたら&がエスケープされてないんじゃないか?という考えに行きつきました。

通常、HTMLのなかで&のような特殊文字を書くときって、&amp;って書かないといけないんですよね。というわけで、上記のコードを下記のように書き換えてみたら、上手く動きました。

<toolbarbutton id="back-forward-dropmarker" type="menu" chromedir="ltr"
     disabled="true" tooltiptext="最近表示したページ"
     onclick="wt.my_func('list');"
      onbroadcast="if (this.disabled) this.disabled =
      document.getElementById('Browser:Back').hasAttribute('disabled') &amp;&amp;
      document.getElementById('Browser:Forward').hasAttribute('disabled');">

めでたしめでたし。

XULからローカルファイルの読み込み・書き込みを行う

XULからローカルのファイルを読み書きする必要があったので,その方法を調べていた.

Mozilla developer centerを見ているとFIle I/Oについてのページがあって,これによるとXPCOMを利用することによって,ローカルファイルにアクセスすることが可能になるようです.ただし,このページに従うと,結構コードが複雑になってしまいそうなので,ラッパーライブラリを利用することに.

今回利用したのは,Io.jsというライブラリです.めんどくさい部分が見えないようになってるし,わかりやすいサンプルコードがついているので,非常に利用しやすいです.

続きを読む

XULからスクロールバーの位置を取得する

Firefoxの機能拡張から,ブラウザで開いているページ内におけるスクロールバーの移動量(スクロール量)を取得する方法がわからなくて,しばらく悩んでいたんだけど,色々なサイトを行ったり来たりしているうちに解決したのでメモ.

続きを読む

Home > Tags > XUL

はてなブックマーク
なかのひと


Return to page top