XULRunnerでページ読み込みメーターを実装する
[]

2011.01.27

このエントリーをはてなブックマークに追加
はてなブックマーク - XULRunnerでページ読み込みメーターを実装する

参考リンク

ポイント

  • (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)
  {}
}

XULの<browser>のイントロスペクション
[]

2010.06.07

このエントリーをはてなブックマークに追加
はてなブックマーク - XULの<browser>のイントロスペクション

またXULRunnerを触り始めた。


> 続きを読む

自作ブラウザ メモ
[]

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


> 続きを読む

netscape.security.PrivilegeMangerの定義済み権限
[]

2009.10.29

このエントリーをはてなブックマークに追加
はてなブックマーク - netscape.security.PrivilegeMangerの定義済み権限

定義済み権限一覧

  • UniversalBrowserRead: 任意のサイトやウィンドウから非公開データを読み取る権限
  • UniversalBrowserWrite: 任意の開いているウィンドウを変更できる権限
  • UniversalXPConnect: ソフトウェアを実行あるいはインストールする権限
  • UniversalPreferencesRead: プログラムの設定を読み取る権限
  • UniversalPreferencesWrite: プログラムの設定を変更する権限
  • CapabilityPreferencesAccess: セキュリティ設定による制限を回避する権限
  • UniversalFileRead: ローカルのファイルを読み込んでリモートへ送信する権限
    > 続きを読む

MozillaとXulrunner関係のブックマーク
[]

2009.10.22

このエントリーをはてなブックマークに追加
はてなブックマーク - MozillaとXulrunner関係のブックマーク

後で読む。

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)の作り方
簡潔かつ、的確な説明で助かります。

XULRunnerにComponentsを登録する
[]

2009.08.05

このエントリーをはてなブックマークに追加
はてなブックマーク - XULRunnerにComponentsを登録する

/path/to/app/以下(= chromeと同じ階層)にcomponentsという名前のフォルダを作り、その中に、.idl、.js、.xpt. .xptsというファイルがあればコンポーネントとして認識するらしい。

さらに、一度アプリケーションに読み込まれたcomponentsフォルダの中身を変更(名前変更や、新しくコンポーネントを追加したなど)した場合は、application.iniのBuildIDを変更しないと、その変更が有効にならない。

Components.interfacesをfor in
[]

2009.06.18

このエントリーをはてなブックマークに追加
はてなブックマーク - Components.interfacesをfor in


> 続きを読む

Components.classesをfor in
[]

2009.06.18

このエントリーをはてなブックマークに追加
はてなブックマーク - Components.classesをfor in

  • XULRunner ver 1.9.0.7


> 続きを読む