1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
---
title: Debugging a XULRunner Application
slug: Archive/Mozilla/XULRunner/Debugging_a_XULRunner_Application
tags:
- XUL
- XULRunner
translation_of: Archive/Mozilla/XULRunner/Debugging_XULRunner_applications
---
<p><a href="ja/XULRunner">XULRunner</a> アプリケーションをデバッグする最も簡単な方法はシステムに問題点を通知させることです。2 種類のコンソールが利用可能であり、必要な情報をそれらに表示させるためのさまざまな設定項目が存在します。
</p>
<h3 id=".E8.A8.AD.E5.AE.9A" name=".E8.A8.AD.E5.AE.9A">設定</h3>
<p>以下のように設定するとデバッグがかなり楽になります。
</p><p>設定は <tt>%appname%/defaults/preferences/</tt> ディレクトリ内の .js ファイルで行います。(拡張子が <tt>.js</tt> であれば)ファイル名は何でもかまいません。ですので、<tt>debug.js</tt> とするのが最良でしょう。
</p>
<pre class="eval">/* デバッグ用設定 */
pref("browser.dom.window.dump.enabled", true);
pref("javascript.options.showInConsole", true);
pref("javascript.options.strict", true);
pref("nglayout.debug.disable_xul_cache", true);
pref("nglayout.debug.disable_xul_fastload", true);
</pre>
<h3 id=".E3.82.B3.E3.83.B3.E3.82.BD.E3.83.BC.E3.83.AB" name=".E3.82.B3.E3.83.B3.E3.82.BD.E3.83.BC.E3.83.AB">コンソール</h3>
<p>windows でコンソールを有効にするには <tt>-console</tt> 引数付きで xulrunner を起動してください。<tt>-console</tt> は application.ini 引数の後になくてはなりません。例:<tt>xulrunner.exe /path/to/application.ini -console</tt>
</p><p>コンソールにテキストを出力するには <tt>dump("my text here\n");</tt> のようにしてください。これは <tt>pref("browser.dom.window.dump.enabled", true)</tt> が有効になっているときのみ機能します。
</p>
<h3 id="JavaScript_.E3.82.B3.E3.83.B3.E3.82.BD.E3.83.BC.E3.83.AB" name="JavaScript_.E3.82.B3.E3.83.B3.E3.82.BD.E3.83.BC.E3.83.AB">JavaScript コンソール</h3>
<p>JS コンソールを有効にするには -jsconsole 引数付きで xulrunner を起動してください。この引数は application.ini 引数の後になくてはなりません。
例:<tt>xulrunner.exe /path/to/application.ini -jsconsole</tt>
</p><p>デフォルトでは JS コンソールはウェブコンテンツのエラーのみを表示します。クロムの JavaScript のエラーを表示させるには <tt>pref("javascript.options.showInConsole", true)</tt> をセットする必要があります。
</p><p>JS エラーログをディスクに保存するには "XRE_CONSOLE_LOG" 環境変数にファイル名のパスを指定してください。例えば <tt>export XRE_CONSOLE_LOG=/path/to/logfile</tt> または <tt>set XRE_CONSOLE_LOG=C:\path\to\logfile</tt>。
</p>
<h4 id="JS_.E3.82.B3.E3.83.B3.E3.82.BD.E3.83.BC.E3.83.AB.E3.81.B8.E3.81.AE.E3.83.A1.E3.83.83.E3.82.BB.E3.83.BC.E3.82.B8.E3.81.AE.E5.87.BA.E5.8A.9B" name="JS_.E3.82.B3.E3.83.B3.E3.82.BD.E3.83.BC.E3.83.AB.E3.81.B8.E3.81.AE.E3.83.A1.E3.83.83.E3.82.BB.E3.83.BC.E3.82.B8.E3.81.AE.E5.87.BA.E5.8A.9B">JS コンソールへのメッセージの出力</h4>
<p>JS コンソールにメッセージを出力するには 2 つの方法があります。
</p>
<ul><li> <code><a href="ja/Components.utils.reportError">Components.utils.reportError</a>(str)</code> は(例えば赤い停止アイコンとともに)「エラー」として <code>str</code> を出力します。
</li><li> <code>jsdump(str)</code>(以下のように定義される関数)は吹き出しアイコンとともに「メッセージ」として <code>str</code> を出力します。
</li></ul>
<pre class="eval">function jsdump(str)
{
Components.classes[<a class=" link-mailto" href="mailto:'@mozilla.org" rel="freelink">'@mozilla.org</a>/consoleservice;1']
.getService(Components.interfaces.<a href="ja/NsIConsoleService">nsIConsoleService</a>)
.logStringMessage(str);
}
</pre>
<p>(<a class="external" href="http://kb.mozillazine.org/JavaScript_Console">この話題についての MozillaZine Knowledge Base の記事</a> も参照)
</p>
<h3 id="Venkman" name="Venkman">Venkman</h3>
<p>XULRunner ベースのアプリケーションに <a href="ja/Venkman">Venkman</a> を永久的に付属させる最も簡単な方法は以下のとおりです(XULRunner 1.8.0.1 にてテスト済み)。
</p>
<ol><li> Venkman を <a class="link-https" href="https://addons.mozilla.org/firefox/216">addons.mozilla.org</a> から入手する(編集時点では v0.9.87)。
</li><li> パッケージを解凍 (unzip) し、<tt>chrome/venkman.jar</tt> ファイルを XULRunner ベースアプリアプリケーションの <tt>chrome</tt> ディレクトリにコピーする
</li><li> <tt>components/venkman-service.js</tt> をアプリケーションの <tt>components</tt> ディレクトリにコピーする
</li><li> XUL ウィンドウのどれかに <code><script src="<a class=" external" rel="freelink">chrome://venkman/content/venkman-overlay.js</a>"/></code> を追加する
</li><li> ウィンドウに Venkman を開くための UI を追加する(メニューアイテムやツールバーボタンという形になるだろう)。その UI から <code>start_venkman()</code> を呼び出すようにする。
</li><li> <tt>chrome/chrome.manifest</tt> に以下の行を追加する。
</li></ol>
<pre class="eval">content venkman jar:venkman.jar!/content/venkman/
locale venkman en-US jar:venkman.jar!/locale/en-US/venkman/
skin venkman modern/1.0 jar:venkman.jar!/skin/modern/venkman/
</pre>
<p><span class="comment">チラシの裏っぽいのでとりあえず保留 (This can also be used in Firefox 1.5 to launch venkman from html buttons in a chrome-loaded page; since venkman.jar gets put into <package>chrome/venkman.jar the chrome.manifest that works for me needs "chrome/" added to venkman.jar: content venkman jar:chrome/venkman.jar!/content/venkman/ locale venkman en-US jar:chrome/venkman.jar!/locale/en-US/venkman/ skin venkman modern/1.0 jar:chrome/venkman.jar!/skin/modern/venkman/</span>
</p>
<h4 id=".E3.83.88.E3.83.A9.E3.83.96.E3.83.AB.E3.82.B7.E3.83.A5.E3.83.BC.E3.83.86.E3.82.A3.E3.83.B3.E3.82.B0" name=".E3.83.88.E3.83.A9.E3.83.96.E3.83.AB.E3.82.B7.E3.83.A5.E3.83.BC.E3.83.86.E3.82.A3.E3.83.B3.E3.82.B0"> トラブルシューティング </h4>
<h5 id="x-jsd_is_not_a_registered_protocol" name="x-jsd_is_not_a_registered_protocol"> x-jsd is not a registered protocol </h5>
<p>Venkman で *.js ファイルを開こうとしたときに "x-jsd is not a registered protocol" というメッセージが表示されたら、XULRunner のバイナリと同じディレクトリに .autoreg という名前の空のファイルを作成してください。もし .autoreg がすでに存在しているならば、それを編集して強制的に最終更新時刻を更新してください。XULRunner は新しいコンポーネントファイルに気付くでしょう。
</p>
<h5 id="function_toOpenWindowByType_is_not_defined" name="function_toOpenWindowByType_is_not_defined"> function toOpenWindowByType is not defined </h5>
<p>"function toOpenWindowByType is not defined" というエラーが発生したら、次の関数をご自分のスクリプトに追加するといいでしょう(venkman のオーバレイ内での現象ではないようだ)。
</p>
<pre class="eval">function toOpenWindowByType(inType, uri) {
var winopts = "chrome,extrachrome,menubar,resizable,scrollbars,status,toolbar";
window.open(uri, "_blank", winopts);
}
</pre>
|