Javascript 使用PhantomJS渲染图形并拍摄快照
我想生成一个图表以添加到电子邮件中。我正在考虑使用PhantomJS来做这件事。我使用的是PhantomJS的2.0版。我想加载d3.js(在cloudfare上)和c3.js(在本地js文件中)。我错过了一些东西。当我使用PhantomJS运行脚本时,它在窗口对象上返回未定义的d3 我下面的代码不起作用:Javascript 使用PhantomJS渲染图形并拍摄快照,javascript,phantomjs,Javascript,Phantomjs,我想生成一个图表以添加到电子邮件中。我正在考虑使用PhantomJS来做这件事。我使用的是PhantomJS的2.0版。我想加载d3.js(在cloudfare上)和c3.js(在本地js文件中)。我错过了一些东西。当我使用PhantomJS运行脚本时,它在窗口对象上返回未定义的d3 我下面的代码不起作用: var page = require('webpage').create(); var fs = require('fs'); page.viewportSize = { width: 40
var page = require('webpage').create();
var fs = require('fs');
page.viewportSize = { width: 400, height : 400 };
page.content = '<html><body><canvas id="surface"></canvas> <button>Hello world</button> </body></html>';
page.includeJs("https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.6/d3.min.js");
var c3_js = "./c3.min.js";
page.includeJs(c3_js);
page.onLoadFinished = function(status) {
var c3 = page.evaluate(function() {
return window;
});
console.log(c3.d3);
page.render('test.png');
phantom.exit();
};
var page=require('webpage').create();
var fs=需要('fs');
page.viewportSize={宽度:400,高度:400};
page.content='Hello world';
第页,包括https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.6/d3.min.js");
var c3_js=“/c3.min.js”;
第页,包括(c3_-js);
page.onLoadFinished=功能(状态){
var c3=page.evaluate(函数(){
返回窗口;
});
控制台日志(c3.d3);
page.render('test.png');
phantom.exit();
};
您的代码有很多问题:
- 是一个异步函数,因此您需要将需要JavaScript的代码放入回调中(您根本没有)
- 您需要为本地文件(c3.js)使用
- 无法从页面上下文返回
,因为它不是可以序列化的基本对象。从: 注意:参数和窗口
函数的返回值必须是一个简单的原语对象。经验法则:如果可以通过JSON对其进行序列化,那么就可以了 闭包、函数、DOM节点等将无法工作强> 您可以在页面上下文中(在evaluate
的内部)执行所有操作,也可以将内容的一些表示返回到外部。如果决定在页面上下文中执行此操作,则应查看各种事件侦听器,如page.evaluate()
,以查看来自页面上下文和page.onConsoleMessage
的控制台消息page.onCallback
- 是一个异步函数,因此您需要将需要JavaScript的代码放入回调中(您根本没有)
- 您需要为本地文件(c3.js)使用
- 无法从页面上下文返回
,因为它不是可以序列化的基本对象。从: 注意:参数和窗口
函数的返回值必须是一个简单的原语对象。经验法则:如果可以通过JSON对其进行序列化,那么就可以了 闭包、函数、DOM节点等将无法工作强> 您可以在页面上下文中(在evaluate
的内部)执行所有操作,也可以将内容的一些表示返回到外部。如果决定在页面上下文中执行此操作,则应查看各种事件侦听器,如page.evaluate()
,以查看来自页面上下文和page.onConsoleMessage
的控制台消息page.onCallback
- 您的代码有很多问题: