2012-04-14 84 views
8

我已经遵循了从入门页面注入jQuery的示例,并且工作得很好。我的jQuery在同一目录中的本地副本,这样做......从PhantomJS调用来暴露变量injectionJS

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

当我尝试注入我自己的脚本(S),没有的功能是提供给我。说我有一个名为myScript.js脚本,只是有

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

我不能再使用DoSomething的喜欢...

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

我已经试过

window.doSomething = function() {}; 

document.doSomething = function() {}; 

以及没有运气,以及试图在随后的page.evaluate()中用window.doSomething()或document.doSomething()调用它们。

回答

7

以下为我的作品,也许您的应用程序逻辑的其他部分是错误的:

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 

结果:

> 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 

或者如果你喜欢的JavaScript(它们是自动生成的,有点丑):

`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

谢谢,这帮了我很多! – 2012-07-17 12:55:26