XULRunner tips

  • Revision slug: XULRunner_tips
  • Revision title: XULRunner tips
  • Revision id: 109163
  • Created:
  • Creator: kixx
  • Is current revision? No
  • Comment 348 words added

Revision Content

XULRunner Frequently Asked Questions. Work in progress.

Extension Manager

To be able to install any extensions, you first need to enable the Extension Manager in application.ini. XULRunner 1.8.0 does not load extensions from the application directory; only the XULRunner directory and the user profile directory are checked. However with XULRunner 1.9 is seems that the XULRunner directory is ignored while the profile and application directories are checked. The following prefs must also be set to make the XPInstall dialog, extension manager, and theme manager work:

pref("xpinstall.dialog.confirm", {{ string.quote("chrome://mozapps/content/xpinstall/xpinstallConfirm.xul") }});
pref("xpinstall.dialog.progress.skin", {{ string.quote("chrome://mozapps/content/extensions/extensions.xul?type=themes") }});
pref("xpinstall.dialog.progress.chrome", {{ string.quote("chrome://mozapps/content/extensions/extensions.xul?type=extensions") }});
pref("xpinstall.dialog.progress.type.skin", "Extension:Manager-themes");
pref("xpinstall.dialog.progress.type.chrome", "Extension:Manager-extensions");
pref("extensions.update.enabled", true);
pref("extensions.update.interval", 86400);
pref("extensions.dss.enabled", false);
pref("extensions.dss.switchPending", false);
pref("extensions.ignoreMTimeChanges", false);
pref("extensions.logging.enabled", false);
pref("general.skins.selectedSkin", "classic/1.0");
// NB these point at AMO
pref("extensions.update.url", {{ string.quote("chrome://mozapps/locale/extensions/extensions.properties") }});
pref("extensions.getMoreExtensionsURL", {{ string.quote("chrome://mozapps/locale/extensions/extensions.properties") }});
pref("extensions.getMoreThemesURL", {{ string.quote("chrome://mozapps/locale/extensions/extensions.properties") }});

Useful Chrome URLs

Most of these require branding.

Window URL Window Type
Extension Manager {{ string.trim("chrome://mozapps/content/extensions/extensions.xul?type=extensions") }} Extension:Manager-extensions
Theme Manager {{ string.trim("chrome://mozapps/content/extensions/extensions.xul?type=themes") }} Extension:Manager-themes
JavaScript Console {{ string.trim("chrome://global/content/console.xul") }} global:console
about:config {{ string.trim("chrome://global/content/config.xul") }}   

Developer Extensions

TJ Laurenzo claims there is another working method to get Venkman and the Extension Developer's Extension working in XULRunner apps.

Venkman

  • Need a custom build or a compatible extension
  • Need to edit compatibility in
  • Needs a method to start venkman (usually by overlaying the main XUL file, similar to existing code for Firefox, Suite, etc.)
  • The function toOpenWindowByType() needs to be defined. There is a working stub. Any better suggestion?
  • Venkman uses {{ string.quote("chrome://communicator/skin/") }} as an alias for {{ string.quote("chrome://global/skin/") }} and this alias was maintained in the XULRunner toolkit until XULRunner 1.9 was released. When using XULRunner 1.9 or greater, you can create your own alias
    • in your chrome manifest add a "skin" line:
      skin communicator classic/1.0 skin/communicator/
    • add a skin folder named "communicator" and add a single CSS file named "communicator.css" with this content:
      @import url("chrome://global/skin");

DOM Inspector

To add DOM Inspector 2.0.* to your XULRunner 1.9.0.* application follow these steps:

  • Download the Dom Inspector (instead of clicking the "Add to..." button, right-click and select "Save Link As...").
  • Save the dom_inspector-*.xpi package to a temporary directory
  • Unzip the package
  • Copy the following files:
    chrome/inspector.jar to the chrome directory of your XULRunner application
    components/inspector-cmdline.js to your components directory
    defaults/preferences/inspector.js to your preferences directory
  • Open your chrome.manifest file and add these lines:
content  inspector                       jar:inspector.jar!/content/inspector/ xpcnativewrappers=no
locale   inspector           en-US       jar:inspector.jar!/locale/en-US/inspector/
skin     inspector           modern/1.0  jar:inspector.jar!/skin/modern/inspector/
skin     inspector           classic/1.0 jar:inspector.jar!/skin/classic/inspector/

overlay  chrome://inspector/content/popupOverlay.xul   chrome://inspector/content/viewers/dom/popupOverlay.xul
overlay  chrome://inspector/content/commandOverlay.xul chrome://inspector/content/viewers/styleRules/commandOverlay.xul
overlay  chrome://inspector/content/keysetOverlay.xul  chrome://inspector/content/viewers/dom/keysetOverlay.xul
overlay  chrome://inspector/content/popupOverlay.xul   chrome://inspector/content/viewers/styleRules/popupOverlay.xul
overlay  chrome://inspector/content/commandOverlay.xul chrome://inspector/content/viewers/dom/commandOverlay.xul

To launch DOM Inspector in your application, you need to open its main window, with a command like this:

window.open("chrome://inspector/content/inspector.xul", "", "chrome");

Alternatively, the DOM Inspector may also be added as an extension:

  1. (if you already have inspector installed for another application you can skip to the next step)
    Follow the instructions above through "Unzip the package."
  2. Create a file in the extensions directory of your application with the same name as the DOM Inspector ID (inspector@mozilla.org) containing one line of text -- the exact path to the root directory of DOM inspector (where the install.rdf is) like this one:
    /home/username/.mozilla/firefox/numbersandletters/extensions/inspector@mozilla.org/
  3. Now create a javascript file with the following code and include it in the main window of your application:
    function startDOMi()
    {
      // Load the Window DataSource so that browser windows opened subsequent to DOM
      // Inspector show up in the DOM Inspector's window list.
      var windowDS = Components.classes["@mozilla.org/rdf/datasource;1?name=window-mediator"]
                                       .getService(Components.interfaces.nsIWindowDataSource);
      var tmpNameSpace = {};                         
      var sl = Components.classes["@mozilla.org/moz/jssubscript-loader;1"]
        .createInstance(Components.interfaces.mozIJSSubScriptLoader);
      sl.loadSubScript("chrome://inspector/content/hooks.js", tmpNameSpace);
      tmpNameSpace.inspectDOMDocument(document);
    }
    
  4. Now create a hook in your application window to start DOM Inspector like this one:
    <button>  
  5. Start your application and DOM Inspector will be installed.
  6. Note: I use this method of installing extensions into all of my Mozilla applications. This way I have one directory where I keep all my Mozilla extensions, and each application (Firefox, Thunderbird) simply contains a few small, one line, files pointing to the location of the extensions. (I keep them in source control to be sure I can maintain compatibility)

    Component Viewer

    Need custom build, first of all. What else?

    Extension Developer's Extension

    Extension Developer's Extension is a useful tool, featuring Live XUL Editor and JavaScript Shell. To install the extension into your application you'll need to hack its install.rdf (see above). You'll probably also want to create menuitems that let you open the JS Shell and other tools provided by the extension.

    Branding

    Branding is a chrome package containing product-specific information (e.g. the product name, vendor, and logo). Some XULRunner components (in particular, the Extension Manager) depend on branding, in the sense that they expect to find certain strings in chrome://branding/locale/brand.dtd and chrome://branding/locale/brand.properties. In order to satisfy these dependencies, you can save Firefox's brand.dtd/brand.properties to chrome/locale/branding folder, modify them appropriately, and register a locale provider for branding by adding the following line to your chrome manifest:

    locale branding en-US chrome/locale/branding/
    

    The location you put the branding files in doesn't matter, as long as you register it appropriately in the manifest. In addition, a branding content package must be registered to include the application logos:

    content branding chrome/branding/
    

    Three files should be provided in this folder: about.png, icon48.png and icon64.png. See Firefox for example.

    Making Windows display correct application name and icon when buttons are grouped

    By default, the task bar on Windows might group windows belonging to the same process into one button to save space. This button is usually called "xulrunner.exe" and has XULRunner's icon. There are two approaches to display the branding of your application instead:

    • When compiling XULRunner yourself: create a file module.ver in the directory mozilla/xulrunner/app with the contents:
      WIN32_MODULE_DESCRIPTION=MyApplication

      MyApplication should be replaced by whatever you want to see as title of the button. You can also replace xulrunner.ico in the same directory to change XULRunner's icon to the icon of your application.

    • With a precompiled XULRunner: use xulrunner-stub.exe to start your application but rename it into MyApplication.exe. With XULRunner 1.9 this will make the desired name appear in the task bar (not with XULRunner 1.8 however). Your application's icon can also be added to this executable with a tool like
    • Resource Hacker. To change icon of specific window, see Window icons

    Reading command line arguments

    See Chrome: Command Line. Command line arguments are handled via nsICommandLineHandler as usual.

    Preferences needed for file download dialogs

    To use the unknown-content-type and file-downloads dialogs from a <browser> element, you need to add the following prefs:

    pref("browser.download.useDownloadDir", true);
    pref("browser.download.folderList", 0);
    pref("browser.download.manager.showAlertOnComplete", true);
    pref("browser.download.manager.showAlertInterval", 2000);
    pref("browser.download.manager.retention", 2);
    pref("browser.download.manager.showWhenStarting", true);
    pref("browser.download.manager.useWindow", true);
    pref("browser.download.manager.closeWhenDone", true);
    pref("browser.download.manager.openDelay", 0);
    pref("browser.download.manager.focusWhenStarting", false);
    pref("browser.download.manager.flashCount", 2);
    //
    pref("alerts.slideIncrement", 1);
    pref("alerts.slideIncrementTime", 10);
    pref("alerts.totalOpenTime", 4000);
    pref("alerts.height", 50);
    

    If you are missing preferences that a dialog requires, you will get the following errors:

    Component returned failure code: 0x8000ffff (NS_ERROR_UNEXPECTED) [nsIPrefBranch.getBoolPref]
    
    Error: dialog has no properties
    Source File: chrome://mozapps/content/downloads/u...ontentType.xul
    Line: 1
    

    Enabling Password Manager

    These preferences seem to be the default in Firefox, however, they are missing in XULRunner. Without these settings Password Manager will not store login details.

    pref("signon.rememberSignons", true);
    pref("signon.expireMasterPassword", false);
    pref("signon.SignonFileName", "signons.txt");
    

    You also need to get an instance of the login manager service, which internally initializes the system:

    Components.classes["@mozilla.org/login-manager;1"].getService(Components.interfaces.nsILoginManager);
    

    Using Firefox 3 to run XULRunner applications

    Firefox 3 contains the XULRunner runtime. It has a

    -app command-line switch to run a specified XUL application instead of starting the browser. For example, on Windows:

      firefox.exe -app path\to\application.ini
    

    On Linux:

    Using firefox command doesn't work. So you can use the xulrunner command :

      xulrunner -app path\to\application.ini

    On the Mac:

      /Applications/Firefox.app/Contents/MacOS/firefox-bin -app /path/to/application.ini
    

    Note that at least on the Mac, you need to use a full path. Partial paths don't seem to work.

    Troubleshooting

    Window title missing

    If the title of your XUL <window> is blank, even though you specified a title attribute, make sure the extension on your XUL file is .xul rather than .xml

    Default Theme

    To create a default theme you need to create a folder in the extensions folder with an install.rdf in it.  As of Oct. 2008, the folder needs to have the same name as the one in Firefox 3.0. 

    \MyApp\Extensions\{972ce4c6-7e08-4474-a285-3208198ce6fd}\install.rdf

    It should also have an <em:internalName>classic/1.0</em:internalName> as that is the default theme in Firefox.

    {{ languages( { "ja": "ja/XULRunner_tips", "fr": "fr/Astuces_XULRunner" } ) }}

    </button>

Revision Source

<p>XULRunner Frequently Asked Questions. Work in progress.</p>
<h2 name="Extension_Manager">Extension Manager</h2>
<p>To be able to install any extensions, you first need to enable the Extension Manager in <a href="/en/XUL_Application_Packaging#em" title="en/XUL_Application_Packaging#em">application.ini</a>. XULRunner 1.8.0 does not load extensions from the application directory; only the XULRunner directory and the user profile directory are checked. However with XULRunner 1.9 is seems that the XULRunner directory is ignored while the profile and application directories are checked. The following prefs must also be set to make the XPInstall dialog, extension manager, and theme manager work:</p>
<pre class="eval">pref("xpinstall.dialog.confirm", {{ string.quote("chrome://mozapps/content/xpinstall/xpinstallConfirm.xul") }});
pref("xpinstall.dialog.progress.skin", {{ string.quote("chrome://mozapps/content/extensions/extensions.xul?type=themes") }});
pref("xpinstall.dialog.progress.chrome", {{ string.quote("chrome://mozapps/content/extensions/extensions.xul?type=extensions") }});
pref("xpinstall.dialog.progress.type.skin", "Extension:Manager-themes");
pref("xpinstall.dialog.progress.type.chrome", "Extension:Manager-extensions");
pref("extensions.update.enabled", true);
pref("extensions.update.interval", 86400);
pref("extensions.dss.enabled", false);
pref("extensions.dss.switchPending", false);
pref("extensions.ignoreMTimeChanges", false);
pref("extensions.logging.enabled", false);
pref("general.skins.selectedSkin", "classic/1.0");
// NB these point at AMO
pref("extensions.update.url", {{ string.quote("chrome://mozapps/locale/extensions/extensions.properties") }});
pref("extensions.getMoreExtensionsURL", {{ string.quote("chrome://mozapps/locale/extensions/extensions.properties") }});
pref("extensions.getMoreThemesURL", {{ string.quote("chrome://mozapps/locale/extensions/extensions.properties") }});
</pre>
<h2 name="Useful_Chrome_URLs">Useful Chrome URLs</h2>
<p>Most of these require <a href="#Branding"> branding</a>.</p>
<table class="standard-table"> <tbody> <tr> <th>Window</th> <th>URL</th> <th>Window Type</th> </tr> <tr> <td>Extension Manager</td> <td>{{ string.trim("chrome://mozapps/content/extensions/extensions.xul?type=extensions") }}</td> <td>Extension:Manager-extensions</td> </tr> <tr> <td>Theme Manager</td> <td>{{ string.trim("chrome://mozapps/content/extensions/extensions.xul?type=themes") }}</td> <td>Extension:Manager-themes</td> </tr> <tr> <td>JavaScript Console</td> <td>{{ string.trim("chrome://global/content/console.xul") }}</td> <td>global:console</td> </tr> <tr> <td>about:config</td> <td>{{ string.trim("chrome://global/content/config.xul") }}</td> <td>  </td> </tr> </tbody>
</table>
<h2 name="Developer_Extensions">Developer Extensions</h2>
<p>TJ Laurenzo claims there is <a class="external" href="http://tjlaurenzo.blogspot.com/2006/03/getting-dev-tools-working-with.html">another working method to get Venkman and the Extension Developer's Extension working in XULRunner apps</a>.</p>
<h3 name="Venkman"><a href="/en/Venkman" title="en/Venkman">Venkman</a></h3>
<ul> <li>Need a custom build or a compatible extension</li> <li>Need to edit compatibility in</li> <li>Needs a method to start venkman (usually by overlaying the main XUL file, similar to existing code for Firefox, Suite, etc.)</li> <li>The function toOpenWindowByType() needs to be defined. There is a <a class="external" href="http://tjlaurenzo.blogspot.com/2006/03/getting-dev-tools-working-with.html">working stub</a>. Any better suggestion?</li> <li>Venkman uses {{ string.quote("chrome://communicator/skin/") }} as an alias for {{ string.quote("chrome://global/skin/") }} and this alias was maintained in the XULRunner toolkit until XULRunner 1.9 was released. When using XULRunner 1.9 or greater, you can create your own alias <ul> <li>in your chrome manifest add a "skin" line: <pre>skin communicator classic/1.0 skin/communicator/</pre> </li> <li>add a skin folder named "communicator" and add a single CSS file named "communicator.css" with this content: <pre>@import url("chrome://global/skin");</pre> </li> </ul> </li>
</ul>
<h3 name="DOM_Inspector"><a href="/en/DOM_Inspector" title="en/DOM_Inspector">DOM Inspector</a></h3>
<p>To add DOM Inspector 2.0.* to your XULRunner 1.9.0.* application follow these steps:</p>
<ul> <li>Download the <a class="link-https" href="https://addons.mozilla.org/en-US/firefox/addon/6622" title="https://addons.mozilla.org/en-US/firefox/addon/6622">Dom Inspector</a> (instead of clicking the "Add to..." button, right-click and select "Save Link As...").</li> <li>Save the <em>dom_inspector-*.xpi</em> package to a temporary directory</li> <li>Unzip the package</li> <li>Copy the following files:<br> <em>chrome/inspector.jar</em> to the chrome directory of your XULRunner application<br> <em>components/inspector-cmdline.js</em> to your components directory<br> <em>defaults/preferences/inspector.js</em> to your preferences directory</li> <li>Open your chrome.manifest file and add these lines:</li>
</ul>
<pre>content  inspector                       jar:inspector.jar!/content/inspector/ xpcnativewrappers=no
locale   inspector           en-US       jar:inspector.jar!/locale/en-US/inspector/
skin     inspector           modern/1.0  jar:inspector.jar!/skin/modern/inspector/
skin     inspector           classic/1.0 jar:inspector.jar!/skin/classic/inspector/

overlay  chrome://inspector/content/popupOverlay.xul   chrome://inspector/content/viewers/dom/popupOverlay.xul
overlay  chrome://inspector/content/commandOverlay.xul chrome://inspector/content/viewers/styleRules/commandOverlay.xul
overlay  chrome://inspector/content/keysetOverlay.xul  chrome://inspector/content/viewers/dom/keysetOverlay.xul
overlay  chrome://inspector/content/popupOverlay.xul   chrome://inspector/content/viewers/styleRules/popupOverlay.xul
overlay  chrome://inspector/content/commandOverlay.xul chrome://inspector/content/viewers/dom/commandOverlay.xul
</pre>
<p>To launch DOM Inspector in your application, you need to open its main window, with a command like this:</p>
<pre>window.open("chrome://inspector/content/inspector.xul", "", "chrome");
</pre>
<p><strong>Alternatively, the DOM Inspector may also be added as an extension:</strong></p>
<ol> <li>(if you already have inspector installed for another application you can skip to the next step) <br> Follow the instructions above through "Unzip the package."</li> <li>Create a file in the extensions directory of your application with the same name as the DOM Inspector ID <a class=" link-mailto" href="mailto:(inspector@mozilla.org)" rel="freelink">(inspector@mozilla.org)</a> containing one line of text -- the exact path to the root directory of DOM inspector (where the install.rdf is) like this one: <pre>/home/username/.mozilla/firefox/numbersandletters/extensions/inspector@mozilla.org/</pre> </li> <li>Now create a javascript file with the following code and include it in the main window of your application: <pre>function startDOMi()
{
  // Load the Window DataSource so that browser windows opened subsequent to DOM
  // Inspector show up in the DOM Inspector's window list.
  var windowDS = Components.classes["@mozilla.org/rdf/datasource;1?name=window-mediator"]
                                   .getService(Components.interfaces.nsIWindowDataSource);
  var tmpNameSpace = {};                         
  var sl = Components.classes["@mozilla.org/moz/jssubscript-loader;1"]
    .createInstance(Components.interfaces.mozIJSSubScriptLoader);
  sl.loadSubScript("chrome://inspector/content/hooks.js", tmpNameSpace);
  tmpNameSpace.inspectDOMDocument(document);
}
</pre> </li> <li>Now create a hook in your application window to start DOM Inspector like this one: <pre><button>  <li>Start your application and DOM Inspector will be installed.</li>

<p>Note: I use this method of installing extensions into all of my Mozilla applications. This way I have one directory where I keep all my Mozilla extensions, and each application (Firefox, Thunderbird) simply contains a few small, one line, files pointing to the location of the extensions. (I keep them in source control to be sure I can maintain compatibility)</p><h3 name="Component_Viewer">Component Viewer</h3>
<p>Need custom build, first of all. What else?</p>
<h3 name="Extension_Developer.27s_Extension">Extension Developer's Extension</h3>
<p><a class="external" href="http://ted.mielczarek.org/code/mozilla/extensiondev/">Extension Developer's Extension</a> is a useful tool, featuring Live XUL Editor and JavaScript Shell. To install the extension into your application you'll need to hack its install.rdf (see above). You'll probably also want to create menuitems that let you open the JS Shell and other tools provided by the extension.</p>
<h2 name="Branding">Branding</h2>
<p>Branding is a <a href="/en/Chrome_Registration" title="en/Chrome_Registration">chrome package</a> containing product-specific information (e.g. the product name, vendor, and logo). Some XULRunner components (in particular, the <a href="#Extension_Manager"> Extension Manager</a>) depend on branding, in the sense that they expect to find certain strings in <code><a class=" external" href="chrome://branding/locale/brand.dtd" rel="freelink">chrome://branding/locale/brand.dtd</a></code> and <code><a class=" external" href="chrome://branding/locale/brand.properties" rel="freelink">chrome://branding/locale/brand.properties</a></code>. In order to satisfy these dependencies, you can save Firefox's <code>brand.dtd</code>/<code>brand.properties</code> to <code>chrome/locale/branding</code> folder, modify them appropriately, and <a href="/en/Chrome_Registration#locale" title="en/Chrome_Registration#locale">register a locale provider</a> for <code>branding</code> by adding the following line to your chrome manifest:</p>
<pre class="eval">locale branding en-US chrome/locale/branding/
</pre>
<p>The location you put the branding files in doesn't matter, as long as you register it appropriately in the manifest. In addition, a branding content package <a href="/en/Chrome_Registration#content" title="en/Chrome_Registration#content">must be registered</a> to include the application logos:</p>
<pre class="eval">content branding chrome/branding/
</pre>
<p>Three files should be provided in this folder: <em>about.png</em>, <em>icon48.png</em> and <em>icon64.png</em>. See <a class="external" href="http://mxr.mozilla.org/mozilla/source/other-licenses/branding/firefox/content/">Firefox</a> for example.<span class="comment"><br>
</span></p>
<h3 name="Making_Windows_display_correct_application_name_and_icon_when_buttons_are_grouped">Making Windows display correct application name and icon when buttons are grouped</h3>
<p>By default, the task bar on Windows might group windows belonging to the same process into one button to save space. This button is usually called "xulrunner.exe" and has XULRunner's icon. There are two approaches to display the branding of your application instead:</p>
<ul> <li>When compiling XULRunner yourself: create a file module.ver in the directory mozilla/xulrunner/app with the contents: <pre>WIN32_MODULE_DESCRIPTION=MyApplication</pre> <p>MyApplication should be replaced by whatever you want to see as title of the button. You can also replace xulrunner.ico in the same directory to change XULRunner's icon to the icon of your application.</p> </li> <li>With a precompiled XULRunner: use xulrunner-stub.exe to start your application but rename it into MyApplication.exe. With XULRunner 1.9 this will make the desired name appear in the task bar (not with XULRunner 1.8 however). Your application's icon can also be added to this executable with a tool like</li> <a class="external" href="http://www.angusj.com/resourcehacker/">Resource Hacker</a>. To change icon of specific window, see <a class="internal" href="/en/Window_icons" title="En/Window icons">Window icons</a></ul> <h2 name="Reading_command_line_arguments">Reading command line arguments</h2> <p>See <a href="/en/Chrome/Command_Line" title="en/Chrome/Command_Line">Chrome: Command Line</a>. Command line arguments are handled via nsICommandLineHandler as usual.</p> <h2 name="Preferences_needed_for_file_download_dialogs">Preferences needed for file download dialogs</h2> <p>To use the unknown-content-type and file-downloads dialogs from a &lt;browser&gt; element, you need to add the following prefs:</p> <pre class="eval">pref("browser.download.useDownloadDir", true);
pref("browser.download.folderList", 0);
pref("browser.download.manager.showAlertOnComplete", true);
pref("browser.download.manager.showAlertInterval", 2000);
pref("browser.download.manager.retention", 2);
pref("browser.download.manager.showWhenStarting", true);
pref("browser.download.manager.useWindow", true);
pref("browser.download.manager.closeWhenDone", true);
pref("browser.download.manager.openDelay", 0);
pref("browser.download.manager.focusWhenStarting", false);
pref("browser.download.manager.flashCount", 2);
//
pref("alerts.slideIncrement", 1);
pref("alerts.slideIncrementTime", 10);
pref("alerts.totalOpenTime", 4000);
pref("alerts.height", 50);
</pre> <p>If you are missing preferences that a dialog requires, you will get the following errors:</p> <pre class="eval">Component returned failure code: 0x8000ffff (NS_ERROR_UNEXPECTED) [nsIPrefBranch.getBoolPref]

Error: dialog has no properties
Source File: <a class=" external" href="chrome://mozapps/content/downloads/unknownContentType.xul" rel="freelink">chrome://mozapps/content/downloads/u...ontentType.xul</a>
Line: 1
</pre> <h2 name="Enabling_Password_Manager">Enabling Password Manager</h2> <p>These preferences seem to be the default in Firefox, however, they are missing in XULRunner. Without these settings Password Manager will not store login details.</p> <pre class="eval">pref("signon.rememberSignons", true);
pref("signon.expireMasterPassword", false);
pref("signon.SignonFileName", "signons.txt");
</pre> <p>You also need to get an instance of the login manager service, which internally initializes the system:</p> <pre class="eval">Components.classes["@mozilla.org/login-manager;1"].getService(Components.interfaces.nsILoginManager);
</pre> <h2 name="Using_Firefox_3_to_run_XULRunner_applications">Using Firefox 3 to run XULRunner applications</h2> <p>Firefox 3 contains the XULRunner runtime. It has a</p> <p><code>-app</code> command-line switch to run a specified XUL application instead of starting the browser. For example, on Windows:</p> <pre class="eval">  firefox.exe -app <em>path\to\</em>application.ini
</pre> <p>On Linux:</p> <p>Using <span style="font-family: Courier New;">firefox </span>command doesn't work. So you can use the <span style="font-family: Courier New;">xulrunner</span> command :</p> <pre class="eval">  xulrunner -app <em>path\to\</em>application.ini</pre> <p>On the Mac:</p> <pre class="eval">  /Applications/Firefox.app/Contents/MacOS/firefox-bin -app <em>/path/to/</em>application.ini
</pre> <p>Note that at least on the Mac, you need to use a full path. Partial paths don't seem to work.</p> <h2 name="Troubleshooting">Troubleshooting</h2> <h3 name="Window_title_missing">Window title missing</h3> <p>If the title of your XUL <code>&lt;<a href="/en/XUL/window" title="en/XUL/window">window</a>&gt;</code> is blank, even though you specified a title attribute, make sure the extension on your XUL file is <code>.xul</code> rather than <code>.xml</code></p> <h2>Default Theme</h2> <p>To create a default theme you need to create a folder in the extensions folder with an <a class="external" href="/en/Install_Manifests" title="http://developer.mozilla.org/editor/fckeditor/core/editor/en/Install_Manifests">install.rdf</a> in it.  As of Oct. 2008, the folder needs to have the same name as the one in Firefox 3.0. </p> <p><code>\MyApp\Extensions\{972ce4c6-7e08-4474-a285-3208198ce6fd}\</code>install.rdf</p> <p>It should also have an &lt;em:internalName&gt;classic/1.0&lt;/em:internalName&gt; as that is the default theme in Firefox.</p> <p>{{ languages( { "ja": "ja/XULRunner_tips", "fr": "fr/Astuces_XULRunner" } ) }}</p></button></pre></li></ol>
Revert to this revision