2012-04-14 3 views
8

Ich habe Beispiele für die Injektion von jQuery von der ersten Seite gefolgt und das funktioniert gut. Ich habe eine lokale Kopie von jQuery im gleichen Verzeichnis, und tun so etwas wie ...Aussetzen von Variablen aus PhantomJS Aufruf an injectJS

if(page.injectJs('jquery.min.js')) { 
    page.evaluate(function(){ 
    //Use jQuery or $ 
    } 
} 

Wenn ich versuche, mein eigenes Skript (n) zu injizieren, keine der Funktionen stehen mir zur Verfügung. Sagen, dass ich ein Skript MyScript.js genannt, die gerade

function doSomething() { 
    // doing something... 
} 

Ich kann dann nicht wie verwenden doSomething hat ...

if(page.injectJs('myScript.js')) { 
    console.log('myScript injected... I think'); 
    page.evaluate(function() { 
    doSomething(); 
    }); 
} else { 
    console.log('Failed to inject myScript'); 
} 

I

window.doSomething = function() {}; 

und

versucht haben,
document.doSomething = function() {}; 

auch ohne Glück, sowie versuchen, sie mit window.doSomething() oder document.doSomething() in der nachfolgenden page.evaluate() aufzurufen.

Antwort

7

für mich die folgenden Werke, vielleicht einige andere Teil Ihrer App Logik ist falsch:

inject.coffee

page = require('webpage').create() 

page.onConsoleMessage = (msg) -> console.log msg 

page.open "http://www.phantomjs.org", (status) -> 
    if status is "success" 
    page.includeJs "http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js", -> 
     if page.injectJs "do.js" 
     page.evaluate -> 
      title = echoAndReturnTitle('hello') 
      console.log title 
     phantom.exit() 

do.coffee:

window.echoAndReturnTitle = (arg) -> 
    console.log "echoing '#{arg}'" 
    console.log $(".explanation").text() 
    return document.title 

Ergebnis:

> phantomjs inject.coffee 
echoing 'hello' 

      PhantomJS is a headless WebKit with JavaScript API. 
      It has fast and native support for various web standards: 
      DOM handling, CSS selector, JSON, Canvas, and SVG. 
      PhantomJS is created by Ariya Hidayat. 

PhantomJS: Headless WebKit with JavaScript API 

oder wenn Sie JavaScript (sie sind automatisch generiert und ein wenig hässlich):

`inject.js':

// Generated by CoffeeScript 1.3.1 
(function() { 
    var page; 

    page = require('webpage').create(); 

    page.onConsoleMessage = function(msg) { 
    return console.log(msg); 
    }; 

    page.open("http://www.phantomjs.org", function(status) { 
    if (status === "success") { 
     return page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js", function() { 
     if (page.injectJs("do.js")) { 
      page.evaluate(function() { 
      var title; 
      title = echoAndReturnTitle('hello'); 
      return console.log(title); 
      }); 
      return phantom.exit(); 
     } 
     }); 
    } 
    }); 

}).call(this); 

do.js:

// Generated by CoffeeScript 1.3.1 
(function() { 

    window.echoAndReturnTitle = function(arg) { 
    console.log("echoing '" + arg + "'"); 
    console.log($(".explanation").text()); 
    return document.title; 
    }; 

}).call(this); 
+0

Danke, das hat mir sehr geholfen! –