Übergeben von Argumenten an die anonyme Funktion innerhalb der Seite.includeJs() und page.evaluate()

Ein wenig hintergrund... ich bin ein wenig javascript und phantom.js also ich weiß nicht, ob dies ist ein javascript-oder phantom.js bug (feature?).

Folgende erfolgreich abgeschlossen ist (sorry für die fehlende Phantomspeisung.exit(), du musst nur Strg+c sobald Sie fertig sind):

var page = require('webpage').create();
var comment = "Hello World";

page.viewportSize = { width: 800, height: 600 };
page.open("http://www.google.com", function (status) { 
    if (status !== 'success') {
        console.log('Unable to load the address!');
        phantom.exit();
    } else {
        page.includeJs('http://code.jquery.com/jquery-latest.min.js', function() {
            console.log("1: ", comment);
        }, comment);

        var foo = page.evaluate(function() {            
            return arguments[0];
        }, comment);

        console.log("2: ", foo);            
    }
});

Dies funktioniert:

page.includeJs('http://code.jquery.com/jquery-latest.min.js', function() {
    console.log("1: ", comment);
}, comment);

Ausgabe: 1: Hello World

Aber nicht:

page.includeJs('http://code.jquery.com/jquery-latest.min.js', function(c) {
    console.log("1: ", c);
}, comment);

Ausgabe: 1: http://code.jquery.com/jquery-latest.min.js

Und nicht:

page.includeJs('http://code.jquery.com/jquery-latest.min.js', function() {
    console.log("1: ", arguments[0]);
}, comment);

Ausgabe: 1: http://code.jquery.com/jquery-latest.min.js

Blick auf das 2. Stück, das funktioniert:

var foo = page.evaluate(function() {            
    return arguments[0];
}, comment);

console.log("2: ", foo);

Ausgabe: 2: Hello World

Und so:

var foo = page.evaluate(function(c) {           
    return c;
}, comment);

console.log("2: ", foo);

Ausgabe: 2: Hello World

Aber nicht dieses:

var foo = page.evaluate(function() {            
    return comment;
}, comment);

console.log("2: ", foo);

Ausgabe:

ReferenceError: Can ' T find variable: Kommentar

phantomjs://Webseite.evaluate():2

phantomjs://Webseite.evaluate():3

phantomjs://Webseite.evaluate():3

2: null

Die gute Nachricht ist, ich weiß, was funktioniert und was nicht, aber wie wäre es mit etwas Konsistenz?

Warum der Unterschied zwischen includeJs und evaluate?

Welches ist der richtige Weg, um Argumente an eine anonyme Funktion?

  • Was meinst du mit " es funktioniert nicht? Gibt es eine Fehlermeldung, schlechten Ausgang, oder etwas anderes?
  • Eine minute, ich werde Bearbeiten, die mit der Ausgabe von jedem...
  • Nice job posting details der einzelnen test-und Ausgang! Das verwirrt mich auch.
InformationsquelleAutor Anders | 2012-08-31
Schreibe einen Kommentar