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

标签 javascript d3.js phantomjs

我正在尝试在服务器端渲染一个力导向的 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/

相关文章:

javascript - 无法更改从 localStorage 检索的对象的属性

javascript - D3 光标下没有SVG元素时的几何缩放

node.js:错误:找不到模块

javascript - 如何使用 PhantomJS 导航分页网站?

javascript - 如何到达内联 javascript 回调函数的父作用域?

javascript - 重定向 URL JavaScript

javascript - 如何根据连接表的列对 Bookshelf.js 查询的结果进行排序?

javascript - 将 json 文件加载到 d3.js

javascript - 如何在 Plottable.js 中在 y 轴上添加水平线

phantomjs - Windows 上的 casperjs.bat 失败,并出现找不到模块 cli.js 错误