2012-04-14 9 views
8

私は、はじめのページからjQueryを注入するための例を追ってきましたが、うまくいきます。私は自分のスクリプト(複数可)を注入しようとすると、私は、関数のどれも私には利用できない、同じディレクトリ内のjQueryのローカルコピーを持っている、と何かなどを行う...PhantomJSから変数を公開してinjectJSに呼び出す

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

。私は

window.doSomething = function() {}; 

を試してみた

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

...私は、その後のようにdoSomethingを使用することはできません私はちょうど

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

を持ってmyScript.jsというスクリプトを持っていると言います

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

ありがとう、これは私をたくさん助けました! –

関連する問題