2012-04-14 14 views
8

I başlarken sayfadan jQuery enjekte için örnekleri takip ettik ve bu sadece iyi çalışır diyoruz. Ben maruz değişkenler injectJS

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

Kendi komut (lar) enjekte etmek deneyin

, fonksiyonların hiçbiri kullanabiliyorsam ... aynı dizinde jQuery yerel bir kopyasını var ve bir şeyler sevmiyorum. Ben

window.doSomething = function() {}; 

ve

denedim

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

... Sonra böyle doSomething kullanamaz Sadece

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

sahiptir MyScript.js adında bir senaryomuz var ki Yanı sıra, şansa bağlı olmaksızın,

document.doSomething = function() {}; 

bunları sonraki page.evaluate() 'de window.doSomething() veya document.doSomething() ile çağırmaya çalışıyorum.

cevap

7

benim için işler şu, uygulama mantığı belki başka bir yeri yanlıştır:

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 

Sonuç:

> 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 

veya (bunlar otomatik olarak oluşturulmuştur ve biraz çirkin) JavaScript isterseniz:

`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

Teşekkürler, bu bana çok yardımcı oldu! –