2011.01.27
参考リンク
ポイント
- (1). browser.xulに を配置する。
- (2). nsIWebProgressListenerインターフェースを実装したオブジェクトを作成する。
- (3). (2)で作成したオブジェクトを gBrowser.addProgressListener でgBrowserにセットする。
(1). browser.xul の一部
<!-- ... -->
<browser type="content" flex="1" id="content"/>
<!-- ... -->
<statusbarpanel class="statusbarpanel-progress" collapsed="true" id="statusbar-progresspanel">
<image src="chrome://yobrowser/content/throbber.gif" id="throbber-image"/>
<progressmeter class="progressmeter-statusbar" id="statusbar-icon" mode="normal" value="0"/>
</statusbarpanel>
<!-- ... -->
(2)(3). MyProgressListenerの実装とセット
var gBrowser = null;
var gProgressMeterPanel = null;
function BrowserStartup()
{
// ....
gBrowser = document.getElementById("content");
gProgressMeterPanel = document.getElementById("statusbar-progresspanel");
gBrowser.addProgressListener(MyProgressListener, Components.interfaces.nsIWebProgress.NOTIFY_ALL);
// ....
}
var MyProgressListener = {
, statusMeter: null // progressmeter
, 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;
}
, onProgressChange : function (aWebProgress, aRequest,
aCurSelfProgress, aMaxSelfProgress,
aCurTotalProgress, aMaxTotalProgress)
{
if (aMaxTotalProgress > 0) {
var percentage = (aCurTotalProgress * 100) / aMaxTotalProgress;
this.statusMeter.value = percentage;
}
}
, onStateChange: function (aWebProgress, aRequest, aStateFlags, aStatus)
{
const nsIWebProgressListener = Components.interfaces.nsIWebProgressListener;
const nsIChannel = Components.interfaces.nsIChannel;
if(aStateFlags & nsIWebProgressListener.STATE_START && aStateFlags & nsIWebProgressListener.STATE_IS_NETWORK){
dump("読み込み開始");
var location = aRequest.QueryInterface(nsIChannel).URI;
gProgressMeterPanel.collapsed = false;
this.statusMeter = document.getElementById("statusbar-icon");
this.statusMeter.value = 0;
}
else if (aStateFlags & nsIWebProgressListener.STATE_STOP && aStateFlags & nsIWebProgressListener.STATE_IS_NETWORK) {
dump("読み込み終了");
gProgressMeterPanel.collapsed = true;
}
}
, onLocationChange: function (aWebProgress, aRequest, aLocationURI)
{}
, onStatusChange: function (aWebProgress, aRequest, aStatus, aMessage)
{}
, onSecurityChange: function (aWebProgress, aRequest, aState)
{}
}
Posted in blog | No Comments »
2010.06.07
またXULRunnerを触り始めた。
> 続きを読む
Posted in blog | No Comments »
2009.11.04
xulrunnerでシンプルなブラウザを作ってて、その時のメモ。
環境
- Windows XP SP2
- Xulrunner 1.9.1.3
ディレクトリ構成
yobrowser
|-- application.ini
|-- chrome
| |-- content
| | |-- about.css
| | |-- about.xul
| | |-- base.css
| | |-- yobrowser.js
| | |-- yobrowser.xul
| | |-- yocommand.js
| | `-- snippet
| | `-- get_computername.js
| |-- ja.jar
| |-- ja.manifest
| |-- jslib.jar
| |-- jsliblive
| | |-- contents.rdf
| | `-- jsliblive.xul
| `-- yobrowser.manifest
|-- components
| |-- Startup.js
| |-- jslib-dom.js
| |-- jslib-service.js
| `-- jslib.xpt
|-- defaults
| `-- preferences
| |-- debug.js
| |-- prefs.js
| `-- user.js
|-- extensions
|-- install.rdf
|-- modules
|-- yobrowser.exe
|-- updates
`-- xulrunner
> 続きを読む
Posted in blog | No Comments »
2009.10.29
定義済み権限一覧
- UniversalBrowserRead: 任意のサイトやウィンドウから非公開データを読み取る権限
- UniversalBrowserWrite: 任意の開いているウィンドウを変更できる権限
- UniversalXPConnect: ソフトウェアを実行あるいはインストールする権限
- UniversalPreferencesRead: プログラムの設定を読み取る権限
- UniversalPreferencesWrite: プログラムの設定を変更する権限
- CapabilityPreferencesAccess: セキュリティ設定による制限を回避する権限
- UniversalFileRead: ローカルのファイルを読み込んでリモートへ送信する権限
> 続きを読む
Posted in blog | No Comments »
2009.10.22
後で読む。
- Sitemap - MDC
- MDCドキュメントのインデックス。ドキュメントがリニアライズされているので、ここを起点にさまざまなドキュメントにアクセスできる。
- nsIDOMWindowInternal
- DOMWindow内部のメンバ一覧。
- Mozilla 開発者資料
- Mozilla 提供の重要な情報へのリンク集
- Firefoxの設定一覧
- いまのところここ以上に 設定に関する網羅的で詳細なドキュメントはないと思う。
- All Interfaces
- nsI*****の一覧。定数と属性、メソッド、シグネチャがすぐ分かる!、しかもXULRunnerのバージョン別にまとめられていて素晴らしいです。こういうのがあるとすごい助かる。
- Mozilla クラス一覧
- 同上。doxygenで生成されたリファンレス。
- XPCNativeWrapper: chrome コードでウィンドウを取り扱う
- XPCNativeWrapperは、オブジェクトに対するアクセス制御を行なうオブジェクト。セキュリティに関する仕組みの基本。
- データを非特権ドキュメントから chrome へ送る
- chrome <=> ウェブページ(非特権ドキュメント)間のデータ受け渡しに関する方法。
- 設定可能なセキュリティポリシー
- セキュリティポリシー設定の基本概念と方法。
- JavaScript Security in Mozilla
- 署名付きjavascriptの基本概念と作り方
- window.showModalDialog - MDC
- モーダル(<=>モードレス)ダイアログを表示するためのメソッドの詳細。もともとIE4〜独自メソッドで、FF3で採用されたようだ。
- showModalDialogのサンプル
- 実際にコードを試すことができる。
- JavaScript で nsIAccessible を使うには
- nsIAccessibleは、オブジェクトに対するアクセス可能性を制御するためのクロスプラットフォームなインターフェースを提供する。
- XUL を使ったブラウザー拡張機能、第1回
- XULファイルに対する制限
- XUL を使ったブラウザー拡張機能、第2回
- 拡張機能とすることでセキュリティの壁を超える。
- seamonkey mozilla/xpcom/sample/nsSample.js
- javascript製XPCOMコンポーネントのシンプルなサンプル
- タブブラウザの、つくりかた?
- よくまとまっていて貴重 日本語で読めるドキュメント。
- XPCOM インターフェイス
- jsからcppで書かれたネイティブコードを呼び出すため方法。
- Events Reference
- 「Noise」というFirefox Add-on(イベントに応じて音を鳴らす?)のサイト。Firefoxとオリジナルイベントの一覧が便利。
- XPCOMVeiwer
- XPCOMコンポーネントを調べるためのアドオン。どのクラスがどのインターフェースを実装しているか、インターフェースのメソッド、属性、エラーが一覧になっていて、とても便利!!。
- Mozillaでプログラミング(XUL)その3
- 2chのスレッド。「○○○○したいんですけど => ここを見れ的」な、有用な情報がたくさんある。
- Using XPCOM in JavaScript without leaking
- XPCOMをjavascriptから利用する際のメモリー管理に関する情報。重要!
- XULRunnerアプリケーションにアドオンをインストールする方法
- 参考にさせてもらってます。
- Firefox拡張機能(extension)の作り方
- 簡潔かつ、的確な説明で助かります。
Posted in blog | No Comments »
2009.08.05
/path/to/app/以下(= chromeと同じ階層)にcomponentsという名前のフォルダを作り、その中に、.idl、.js、.xpt. .xptsというファイルがあればコンポーネントとして認識するらしい。
さらに、一度アプリケーションに読み込まれたcomponentsフォルダの中身を変更(名前変更や、新しくコンポーネントを追加したなど)した場合は、application.iniのBuildIDを変更しないと、その変更が有効にならない。
Posted in blog | No Comments »
2009.06.18
Posted in blog | No Comments »
2009.06.18
Posted in blog | No Comments »