gpt4 book ai didi

javascript - 使用 Phantomjs 从 D3.js 输出 SVG 图形

转载 作者:行者123 更新时间:2023-11-30 00:10:36 26 4
gpt4 key购买 nike

我正在尝试在服务器端渲染一个力导向的 D3.js 图(由于使用的数据集的大小)并将其输出为一组图稳定状态的坐标,即当大多数重力计算已经完成。现在我正在使用 XMLSerlaizer。

每当我使用 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... 中运行和输出图形绘制函数的值?

感谢您花时间阅读我的问题。

编辑

如果我删除周围的 page.includeJs('https://d3js.org/d3.v3.min.js', function() {}); 我会收到控制台消息直到需要包含此 javascript 的位置。如何在不这样做的情况下包含 d3.js?

最佳答案

通过删除周围的 page.includeJs block 并替换为 page.injectJs('d3.v3.min.js');

来修复它

关于javascript - 使用 Phantomjs 从 D3.js 输出 SVG 图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36665673/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com