/usr/local/CPAN/Mozilla-DOM/WebNav.pm
# This example demonstrates WebNavigation.
#
# $CVSHeader: Mozilla-DOM/examples/WebNav.pm,v 1.3 2007-06-06 21:46:56 slanning Exp $
package WebNav;
use strict;
use warnings;
use Cwd 'getcwd';
use Glib qw(TRUE FALSE);
use Gtk2;
use Gtk2::MozEmbed '0.04';
use Mozilla::DOM '0.14'; # for WebNavigation
use Mozilla::DOM::WebNavigation qw(:flags);
use Glib::Object::Subclass Gtk2::Window::;
sub INIT_INSTANCE {
my $self = shift;
print "LOAD_FLAGS_MASK=", LOAD_FLAGS_MASK, $/;
my $embed = Gtk2::MozEmbed->new();
$embed->signal_connect(net_stop => \&net_stop_cb);
# This demonstrates navigating the session history
# with keypress events.
$embed->signal_connect(dom_key_press => \&dom_key_press_cb);
# This allows popup windows (c.f. BrowserObjects.pm).
$embed->signal_connect(new_window => sub {
my ($embed, $chrome) = @_;
my $newwin = WebNav->new();
$newwin->set_default_size(600, 400);
$newwin->show_all();
return $newwin->{_embed};
});
$self->add($embed);
my $cwd = getcwd();
$embed->load_url("file://$cwd/webnav1.html");
$self->{_embed} = $embed;
}
sub net_stop_cb {
my $embed = shift;
my $nav = _get_nav($embed);
# GetSpec gets the full URI; you can use other methods
# to get specific parts of the URI.
my $uriobj = $nav->GetCurrentURI;
my $uri = defined($uriobj) ? $uriobj->GetSpec : '';
my $charset = defined($uriobj) ? $uriobj->GetOriginCharset : '';
my $refererobj = $nav->GetReferringURI;
my $referer = defined($refererobj) ? $refererobj->GetSpec : '';
print "URI: $uri\n";
print "referer: $referer\n";
print "charset: $charset\n";
print "can go back? ", ($nav->GetCanGoBack ? 'yes' : 'no'), $/;
print "can go forward? ", ($nav->GetCanGoForward ? 'yes' : 'no'), $/;
}
sub dom_key_press_cb {
my ($embed, $event) = @_;
my $nav = _get_nav($embed);
my $num = join('|', map(ord, '1' .. '9'));
my $code = $event->GetCharCode;
if ($code == ord('b')) {
$nav->GoBack();
} elsif ($code == ord('f')) {
$nav->GoForward();
} elsif ($code =~ /^($num)$/) {
my $i = $code - ord('1');
$nav->GotoIndex($i);
}
return FALSE;
}
## Helper functions
sub _get_nav {
my $embed = shift;
my $browser = $embed->get_nsIWebBrowser;
my $iid = Mozilla::DOM::WebNavigation->GetIID;
my $nav = $browser->QueryInterface($iid);
return $nav;
}
1;