control firefox remotely
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!