#!perl -w use strict; use Test::More; use WWW::Mechanize::FireFox; my $mech = eval { WWW::Mechanize::FireFox->new( autodie => 0, #log => [qw[debug]] )}; if (! $mech) { my $err = $@; plan skip_all => "Couldn't connect to MozRepl: $@"; exit } else { plan tests => 2; }; isa_ok $mech, 'WWW::Mechanize::FireFox'; my $browser = $mech->tab->{linkedBrowser}; $mech->get_local('49-mech-get-file.html'); sub eval_in_page_with_redefined_alert { my ($self,$str,$redefined_alert) = @_; my $eval_in_sandbox = $self->repl->declare(<<'JS'); function (w,str,myalert) { var unsafeWin = w.wrappedJSObject; var safeWin = XPCNativeWrapper(unsafeWin); var sandbox = Components.utils.Sandbox(safeWin); sandbox.window = safeWin; sandbox.window.alert = myalert; // <-- sandbox.alert = myalert; // <-- sandbox.document = sandbox.window.document; sandbox.__proto__ = unsafeWin; var res = Components.utils.evalInSandbox(str, sandbox); return [res,typeof(res)]; }; JS my $window = $self->tab->{linkedBrowser}->{contentWindow}; my $uri = $self->uri; return @{ $eval_in_sandbox->($window, $str, $redefined_alert ) }; }; my @alerts; eval_in_page_with_redefined_alert($mech,"window.alert('Hello')", sub { my @params = @_; push @alerts, \@params }); $mech->repl->poll; is_deeply \@alerts, [['Hello']], "We can capture alert() boxes if we want to";