Ich habe ein Casper JS Skript (Casper JS basiert auf Phantom JS), die ein anderes Skript in eine externe URL einfügt. Das injizierte Skript führt nach dem Laden des DOMs Code aus, ähnlich wie jQuerys $(document).ready()
funktioniert.In Casper JS (basierend auf Phantom JS), wie JavaScript-Fehler zu fangen, die nach dem DOM geladen werden?
Wenn das injizierte Skript einen JavaScript-Fehler enthält, fängt Casper JS es nicht ab, wenn es nach dem DOM geladen wird. Casper wird Fehler finden, wenn sie sofort ausgeführt werden.
Der folgende Code wird nicht geben Sie den Fehler ReferenceError: Strict mode forbids implicit creation of global property 'string'
aus. Wenn Sie die untersten Zeilen betrachten, können Sie die Kommentare in den Zeilen austauschen, um diesen Fehler zu erhalten. Ich möchte diesen Fehler auftreten, auch wenn Code nach dem Laden des DOM ausgeführt wird. casperjs casper.js
casper.js
// Include Casper's "utils" so we can dump variables.
var require = patchRequire(require);
var utils = require('utils');
// Open a URL and inject our JS.
var casper = require('casper').create();
casper.start('http://example.com/', function() {
casper.page.injectJs('inject.js');
});
// Wait a moment to give everything time to load, then check that the function
// exists and returns something.
casper.wait(1000, function() {
var testValue = casper.evaluate(function() {
return test();
});
casper.echo(testValue);
});
// If there are any errors along the way, then print them.
casper.on('page.error', function(msg, trace) {
casper.echo(msg);
casper.echo(utils.dump(trace));
});
// Actually run everything.
casper.run();
inject.js
// Be strict on this page so that errors occur.
'use strict';
function run() {
window.test = function() {
// An error will occur here because the variable was never declared.
testing = 'test';
return testing;
}
}
// If the below line is used, then "ReferenceError: Strict mode forbids implicit
// creation of global property 'string'" appears as expected.
// run();
// If the below line is used instead of the one above, then the same error does
// not appear.
document.addEventListener('DOMContentLoaded', run);
casper.on ('page.error') soll irgendwelche Fehler auf der Seite zeigen, funktioniert es nicht? – Vaviloff
Nein, wie ich bereits sagte, wird ReferenceError nicht angezeigt, wenn die run() - Funktion über den DOMContentLoaded-Ereignis-Listener ausgeführt wird und nicht nackt ausgeführt wird. – Gary