Ich denke, das liegt daran, dass Ihre scripts
Variable nicht in der Browser-Umgebung definiert ist (es nur in Ihrem Casper Umgebung definiert ist). In der Tat, wenn Sie evaluate
verwenden, ist der Kontext das DOM, nicht die Casper-Instanz.
Dies wird null
zurück:
var casper = require('casper').create();
var tag = 'h1'; // This is our global variable...
casper.start('http://example.com/');
casper.waitForSelector('body', function() {
this.echo(this.evaluate(function() {
return document.querySelector(tag).textContent; // Oops!
}));
});
casper.run();
Aber wenn wir unsere Variable im Zusammenhang mit evaluate
injizieren, bekommen wir das erwartete Ergebnis (die "Beispiel Domain" ist):
var casper = require('casper').create();
casper.start('http://example.com/');
casper.waitForSelector('body', function() {
this.echo(this.evaluate(function (tag) {
return document.querySelector(tag).textContent;
}, 'h1'));
});
casper.run();
Die Variable 'Skripte' sind außerhalb des Seitenkontexts definiert, werden aber innerhalb verwendet. –
Und wie kann ich die 'raScripts' Variable außerhalb der' this.evaluate' Funktion verwenden? –
Sie haben das bereits getan, indem Sie es vom Callback 'evaluate' zurückgeben. Der Wert von 'raScripts' ist gleich dem Wert von' scripts' (wenn der Wert ein primitives Objekt ohne zyklische Referenzen ist). Sie müssen nur den Wert von 'script' zurück in den Seitenkontext für die nächste" Berechnung "innerhalb des Seitenkontextes übergeben. –