Control Firefox remotely
19 May 2010
Do you wish to have firefox auto-refresh a certain page/tab?
Are you tired of having to focus the firefox window (means, leaving vim) just to switch tab, go back a couple of pages, open a new page, etc?
Fear no more.
MozRepl
MozRepl is a javascript module that can be used to control various Mozilla based applications ‘from the inside’.
It is also an application itself – you can use it straight from the commandline.
Beware though, you’ll have to write javascript.
Since I don’t like javascript, that wasn’t very appealing.
Lucky for me, there’s a couple of Perl bindings, and here’s the most interesting
ones.
- MozRepl::*
- MozRepl::RemoteObject
- WWW::Mechanize::Firefox
Since I had prior knowledge of the WWW::Mechanize class, I went with
WWW::Mechanize::Firefox and started hacking.
So far, I’ve created several functions:
- load new page $page
- refresh the current page
- back / forward
- get current URI
- save current page as HTML
- show basic information about the current page
- extract all links
- click (yep! :)
- load a local page / directory
- dump the current page as a png. This will dump what firefox have rendered -
not only what you see. That means, you can make a full-sized
PNG copy, no matter how big the page is. It also tries to be smart by naming
the captured pictures after title-tag (escaped to some extent).
This have been possible with webkit for ages and something I missed in Fx.
Now I have a couple of keybindings in my window manager for going back/forward,
load a uri (using the dmenuurl script from my clipbored project), etc.
The ::Firefox subclass does not support all features of the main WWW::Mechanize
module yet, and therefore I’m using both.
If you want to try it out, you’ll need the modules first:
cpan install WWW::Mechanize WWW::Mechanize::Firefox
When cpan is ready, just clone my repository:
git clone git://github.com/trapd00r/firefox-remote.git
And like always: feel free to fork and/or patch!