Newsgroup
Authors
- Michael Lau
- Paul St-Denis
Weekly Summaries
NOTE: these should be turned into links to separate pages.
FAQ
What is an example of tab browser in XUL?
How can i get URIs on open tabs?
Using the following code sample,
- // Get browsers object
- var browsers=document.getElementById('content').browsers;
- var numBrowsers=browsers.length;
- for (var i=0; numBrowsers>i; i++)
- {
- var thisURI=browsers[i].currentURI.spec;
- // do something with it.
- }
The person can get the titles too using the .contentTitle tag.
How to add and remove values to/from, set up inside a <prefwindow> container to handle the preference?
- <prefwidnow> can contain any control, just like a regular window. Some of them can be tied to a preference so that the preference is automatically updated as the control is manipulated. Others, like <listbox>, cannot be so tied, but one can always write a script that updates preferences explicitly, via nsIPrefBranch interface.
Can a XUL template be used for RSS?
- You should be able to use a XUL template to display feeds, although you may have to write the feed data to an RDF datasource first.
How do I remove the file location header included in the default printing setting?
- See http://www.xulplanet.com/references/elemref/ref_iframe.html, the first user note at the bottom. Change this line
var settings = PrintUtils.getPrintSettings();
- to this
var settings = PrintUtils.getPrintSettings().clone();
- settings.docURL = " "; // suppress URL on printout
- Other options you can modify are documented here:
Is it possible to load the template with XML file and not rdf based source?
- That feature isn't available yet. The code that implements it is waiting to be reviewed. See bug https://bugzilla.mozilla.org/show_bug.cgi?id=321171
How can I manage scrolling outside the browser?
- This problem can be solved by capturing the focus events and giving the focus to another xul element or capturing and canceling the keypress events
DrawWindow with transparent background possible?
With Mozilla trunk --------------------------------------------------------- nsIDOMCanvasRenderingContext2D* c2d = //coming from <canvas> nsIDOMWindow* window = //coming from <iframe> c2d->DrawWindow( window, ..., "rgba(0,0,0,0)"); ---------------------------------------------------------
- This makes canvas background transparent if background is transparent but when "window" is coming from top level content window, background is not transparent.
- So how can I do this same way as <iframe>? You can't right now
I want to create dymanically multiple elements with datasource attribute. I want to create XUL element in the javascript, assign datasources/ref/template attribute to it so that the content is generated from the rdf datasource
- Create the element, set the datasources attribute then add the element to the document. This should then create the database.
How can I send XML/XUL document fragrement to the server instead of using GET or POST variables?
- You can send documents using send(document), so you should be able to insert the fragment into an empty document.
I get the error: Gecko MinVersion requirement not met.
- Visit http://developer.mozilla.org/en/docs/Getting_started_with_XULRunner#Step_4:_Set_up_application.ini to find out how to properly set up the application.ini file.
Is Localizing remote XUL possible?
- Loading remote DTDs for XML documents is currenty not yet supported in XUL.
- The following bugs were reported on this issue.
- https://bugzilla.mozilla.org/show_bug.cgi?id=22942
- https://bugzilla.mozilla.org/show_bug.cgi?id=133698
When loading an XSLT stylesheet into an XML I get the error: "Error loading stylesheet: An XSLT stylesheet load was blocked for security reasons."
- That error is from a security check that has been put up to safeguard against cross-site-scripting attacks.
- A scheme is in development to allow servers to open up their site for cross-site access, but that's not yet done.
hidechrome="true" doesn’t work on a Mac?
- Unfortunately, no simple solution to this was posted. A workaround is to open the content in a new window using "window.open" and send titlebar=”no” as one of the flags in the 3rd argument.
Are XUL attributes integers?
- Attributs such as left="100" or top="200" look as if they're integers but they are actually handled as strings.
- To use them as integers use JavaScript's parseInt() function.
Using the "icon" attribute on a button
From XULPlanet.com reference:
- This attribute should be used to set the usage for common buttons. Some platforms display these buttons with a small icon indicating their usage. This should be used in place of the image attribute. Possible values include: accept, cancel, help, open, save, find, clear, yes, no, apply, close, print, add, remove, refresh, go-forward, go-back, properties, select-font, select-color, network. If you are using a button that matches one of these common usages, use the icon attribute to indicate this.
Dynamic Objects in Toolbar
There may be a few ways to implement this:
- By building your menupopup from an RDF datasource, which could be generated on the server.
- By getting data (e.g. JSON string) from the server, parsing it on client, and building the menupopup using DOM methods (such as document.createElementNS).
- By getting data as XML from the server. (server can just send the XUL code to use for popup - alternatively it can send generic XML describing the attributes of the items in the menu and you generate the XUL on client by applying an XSLT transform.)
Can I change a XUL tree cell/row/item background color with Javacript?
To set the background color you need to set the property for the cell/row and not for the item. An example of this is:
- selectedtreeitem = tree.view.getItemAtIndex(tree.currentIndex);
- electedtreeitem.firstChild.setAttribute('style', 'background: #FF0000');
Specifying window.onload function
To specify a function to run when the window is loaded,add the following code between the script tags in the XUL file:
window.addEventListener("load", function(e) { startup(); }, false);
Similarly, for onunload use the code:
window.addEventListener("unload", function(e) { shutdown(); }, false);
Is there an event which is called when the Firefox browser is initialized?
An event is initiated when the application starts up and when the profile is changed. For more information please look at the following link: nsExtensionManager.js
Is nsIVariant fully supported using python?
Python has full support for variants. Pass a Python string/int/etc to the method requiring an nsIVariant. A Python object is convered when implmenting an interface taking an nsIVariant.
If you have a similar code base as the following:
- onBookmarkContextMenu: function(event, id) {
- document.getElementById("bookmarkPopup").showPopup(document.getElementById(id),
- event.screenX + 6, event.screenY + 6, "popup", "bottomright",
- "bottomright");
- }
Use the hidePopup() function to solve this issue.
What is an example of addProgressListener?
An example of this is this:
- // Associate the progress listener for a "browser" to a listener object
- browserObject.addProgressListener( listObj,
- Components.interfaces.nsIWebProgress.NOTIFY_STATE_WINDOW );
- // Remember to define the object, something like this:
- listObj = new Object();
- listObj.wpl = Components.interfaces.nsIWebProgressListener;
- listObj.QueryInterface = function(aIID) {
- if (aIID.equals(listObj.wpl) ||
- aIID.equals(Components.interfaces.nsISupportsWeakReference) ||
- aIID.equals(Components.interfaces.nsISupports)) return this;
- throw Components.results.NS_NOINTERFACE;
- }
- listObj.onStateChange = function(aProgress, aRequest, aFlag, aStatus) {
- if (aFlag & listObj.wpl.STATE_START) {
- // This fires when the load event is initiated
- } else {
- if (aFlag & listObj.wpl.STATE_STOP) {
- if ( aFlag & listObj.wpl.STATE_IS_WINDOW ) {
- // This fires when ALL load finish
- }
- if ( aFlag & listObj.wpl.STATE_IS_NETWORK ) {
- // Fires when ALL load are REALLY over,
- // do something "final" here
- // (my two cents)
- } else {
- // This fires when a load finishes
- }
- }
- }
- return 0;
- }
- // This fires when the location bar changes i.e load event is confirmed
- // or when the user switches tabs
- listObj.onLocationChange = function(aProgress, aRequest, aURI) {
- // do whatever you want to do
- return 0;
- }
- // For definitions of the remaining functions see XulPlanet.com
- listObj.onProgressChange = function() { return 0 };
- listObj.onStatusChange = function() { return 0 };
- listObj.onSecurityChange = function() { return 0 };
- listObj.onLinkIconAvailable = function() { return 0 };
- /*
- I use the progress listener to trap the end of a local HTML
- "template" file loading, and run XSLT transormations.
- In addition I need to evaluate the browser contentDocument DOM
- in order to clean "target" attributes on links, and so on.
- HTH
- /