2016-04-16 6 views
2

私は、(使用されたデータセットのサイズのために)サーバー側で強制的にD3.jsグラフをレンダリングしようとしています。すなわち重力計算の大部分が完了したときのグラフの安定した状態である。今のところ私はXMLSerlaizerを使用しています。Phantomjsを使用してD3.jsからSVGグラフを出力する

私がphantomjsを使用してコマンドラインからページを実行するたびに、グラフ描画を呼び出す関数は決して使用されないようです。これは、私が追加したpage.onConsoleMessageの欠落が原因であると思っていましたが、私が評価したい機能の外にコンソールメッセージが表示される唯一の出力です。

var page = require('webpage').create(); 
page.content = '<html><body></body></html>'; 

console.log("before"); 

page.includeJs('https://d3js.org/d3.v3.min.js', function() { 


    page.onConsoleMessage = function(msg) { 
     console.log("Message:" + msg); 
    }; 


    console.log("p"); 

    var html = page.evaluate(function() { 
     var body = d3.select('body'); 

     var data = { 
       "nodes":[ 
         {"name":"Steve"}, 
         {"name":"Dave"}, 
         {"name":"Matt"}, 
         ], 
       "links": 
         [{"source":0, "target":1}, 
         {"source":1, "target":2}, 
         {"source":2, "target":0} 
         ] 
        } 


     var force = d3.layout.force() 
       .charge(-140) 
       .linkDistance(2) 
       .size([500, 500]) 
       .nodes(data.nodes) 
       .links(data.links) 
       .start(); 

     var svg = body. 
       .append('svg') 
       .attr("width", 500) 
       .attr("height", 500) 
       .attr("id", "svg"); 
     ... 
     ...Graph drawing code 
     ... 


     var s = new XMLSerializer(); 
     return s.serializeToString(document.querySelector('svg')); 
    }); 
console.log(html); 
console.log(page.content); 
phantom.exit(); //Never gets called, "after" is printed 
}); 

console.log("after"); 
phantom.exit(); 

は、だから私の質問は、どのように私は実行しない場合の出力page.includeJs...内部のグラフ描画機能の値は?

私の質問を読んでいただきありがとうございます。

EDIT

私は周囲のpage.includeJs('https://d3js.org/d3.v3.min.js', function() {});を削除した場合、私はこのJavaScriptが含まれる必要がある時点までのコンソールメッセージを取得します。このようにしなくても、どのようにd3.jsを組み込むことができますか?

答えて

1

周囲page.includeJsブロックを除去することによってそれを修正し、page.injectJs('d3.v3.min.js');

で置き換え
関連する問題