Question

I'm writing a firefox xul extension, and I must have an interaction beetween the web page and extension.

Example: If I press a link from the page I want to call a function in the xul extension. Anyone know if there is a way?

Thanks a lot

Was it helpful?

Solution

Yes, you can do this. You'll need to access page content with the content object.

In your extension code you can select all links and then add an eventListener:

allLinks = content.document.getElementsByTagName("a"),

for (var i=0, il=allLinks.length; i<il; i++) {
    elm = allLinks[i];
    elm.addEventListener("click", nowclicked, false);
}

And then your event listener would look something like:

nowclicked : function () {
    alert("a linked was clicked!");
}

If you need a working example, I've modified the Link Target Finder extension by Robert Nyman to add an alert when links are clicked. The modified code is in linkTargetFinder.js.

OTHER TIPS

See MDN example for Sending data from unprivileged document to chrome document.

Basically, in your chrome code you have to add a listener:

// The last value is a Mozilla-specific value to indicate untrusted content is allowed to trigger the event.
document.addEventListener("MyExtensionEvent", function(e) {myExtension.myListener(e);}, false, true);

and fire the event from content script. Note that document in the following is the contentDocument not XulDocument

var evt = document.createEvent("Events");
evt.initEvent("MyExtensionEvent", true, false);
element.dispatchEvent(evt);
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top