Web Progress Notifications in Fennec
Working on OpenAttribute for Firefox Mobile (Fennec) yesterday, one of the
first challenges I faced was how to get notification that a page had finished
loading. In the desktop version, I attach a listener for all tabs using
gBrowser.addTabsProgressListener
. Unfortunately with browsers running in their
own processes, this approach doesn’t work on Fennec. I spent quite a bit of time
trying different approaches, all with the intent of creating a progress listener
and attaching it myself. The Electrolysis wiki page says that one of the
nice side effects of the message passing model is that this problem is easy to
solve, but it sure didn’t feel easy.
I don’t remember why I eventually started looking at the mobile-browser source tree, but as I looked through browser.js, there it was:
messageManager.addMessageListener("Content:StateChange", this);
It turns out it is really easy: you can listen for Content:StateChange
or
Content:LocationChange
, and get access to the same details you’d normally have
in the WebProgressListener
implementation.