私は、(使用されたデータセットのサイズのために)サーバー側で強制的に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を組み込むことができますか?