#!/usr/bin/perl -w
use strict;
use WWW::Mechanize::Firefox;
my $www=WWW::Mechanize::Firefox->new(
#stack_depth=>5,
autodie=>1,
timeout=>60,
#tab=>qr/$tabregex/,
bufsize => 50_000_000,
);
#$www->events(['load','onload','loaded','DOMFrameContentLoaded','DOMContentLoaded','error','abort','stop']);
print time." get #1\n";
$www->get('http://cmcc.deviantart.com/');
print time." after get #1\n";
print time." content #1\n";
my $con=$www->content();
print time." after content #1\n";
print time." get #2\n";
$www->get('http://cmcc.deviantart.com/#/d1a8l1t');
print time." after get #2\n";
print time." content #2\n";
$con=$www->content();
print time." after content #2\n";
####
1291386396 get #1
1291386398 after get #1
1291386398 content #1
1291386398 after content #1
1291386398 get #2
1291386399 after get #2
1291386399 content #2
1291386399 after content #2
####
sub _addEventListener {
my ($self,$browser,$events) = @_;
$events ||= $self->events;
$events = [$events]
unless ref $events;
# This registers multiple events for a one-shot event
my $make_semaphore = $self->repl->declare(<<'JS');
function(browser,events) {
var lock = {};
lock.busy = 0;
var b = browser;
var listeners = [];
for( var i = 0; i < events.length; i++) {
var evname = events[i];
var callback = (function(listeners,evname){
return function(e) {
if (! lock.busy) {
lock.busy++;
lock.event = evname;
lock.js_event = {};
lock.js_event.target = e.originalTarget;
lock.js_event.type = e.type;
alert("Caught first event " + e.type + " " + e.message);
} else {
alert("Caught duplicate event " + e.type + " " + e.message);
};
for( var j = 0; j < listeners.length; j++) {
b.removeEventListener(listeners[j][0],listeners[j][1],true);
};
};
})(listeners,evname);
listeners.push([evname,callback]);
b.addEventListener(evname,callback,true);
};
return lock
}
JS
return $make_semaphore->($browser,$events);
};