# This example shows how to get element.innerHTML, # which lets you print out HTML nodes as text. # # $CVSHeader$ package InnerHTML; use strict; use warnings; use Cwd 'getcwd'; use Glib qw(TRUE FALSE); use Gtk2; use Gtk2::MozEmbed '0.04'; use Mozilla::DOM '0.18'; # for NSHTMLElement use Glib::Object::Subclass Gtk2::Window::; sub INIT_INSTANCE { my $self = shift; my $embed = Gtk2::MozEmbed->new(); $embed->signal_connect(net_stop => \&net_stop_cb); $self->add($embed); my $cwd = getcwd(); $embed->load_url("file://$cwd/index.html"); $self->{_embed} = $embed; } sub net_stop_cb { my $embed = shift; # Get element my $browser = $embed->get_nsIWebBrowser; my $window = $browser->GetContentDOMWindow; my $selection = $window->GetSelection; my $doc = $window->GetDocument; # this all works: # my $diid = Mozilla::DOM::NSDocument->GetIID; # my $nsdoc = $doc->QueryInterface($diid); # print "charset=", $nsdoc->GetCharacterSet, $/; # print "location=", $nsdoc->GetLocation->ToString, $/; # print "contenttype=", $nsdoc->GetContentType, $/; # print "title=", $nsdoc->GetTitle, $/; # print "lastmod=", $nsdoc->GetLastModified, $/; # print "referer=", $nsdoc->GetReferrer, $/; my $docelem = $doc->GetDocumentElement; print "----------- HTML ------------\n"; print '<', $docelem->GetNodeName, ' '; if ($docelem->HasAttributes) { my $attrs = $docelem->GetAttributes; for (my $i = 0; $i < $attrs->GetLength; $i++) { my $attr = $attrs->Item($i); print $attr->GetNodeName, '="', $attr->GetNodeValue, '" '; } } print ">\n"; # Switch that element to NSHTMLElement interface my $eiid = Mozilla::DOM::NSHTMLElement->GetIID; my $nshtmlelement = $docelem->QueryInterface($eiid); # Print out innerHTML. # Unfortunately Mozilla doesn't support outerHTML, # so we can't print the whole thing (not to mention # the DOCTYPE thing at the top) print $nshtmlelement->GetInnerHTML, $/; print "\n\n"; } # maybe need to add DocumentTraversal interface, NodeIterator 1;