我在 2016 年使用 jsdom 8.4.0 最新版本时仍然看到这个问题。
我在他们的 GitHub 上记录了一个问题,说明我看到错误
var data = new window.google.visualization.DataTable();
^
TypeError: window.google.visualization.DataTable 不是函数
或
否则 google.load 永远不会正确返回..如果我不在脚本中使用自动加载。
https://github.com/tmpvar/jsdom/issues/1463
尝试使用谷歌自动加载方式在脚本标签中同步加载它会出现此错误:
var data = new google.visualization.DataTable();
TypeError: google.visualization.DataTable 不是函数
如果我在 jsdom 给出 done 事件后将其更改为使用 google.load,它就存在并且我没有得到任何详细信息
google.load("visualization", "1", {packages:["corechart"]});
google.setOnLoadCallback(function(){
console.log("Google onload callback called");
window.docharting();
});
完整代码:
var jsdom = require("jsdom");
//TODO newscript way to load, can update someday
//http://www.gstatic.com/charts/loader.js
//google.charts.load('current', {'packages':['corechart']});
//google.charts.setOnLoadCallback(docharting);
jsdom.env({
html: '
',
scripts: ["http://www.google.com/jsapi?autoload={'modules':[{'name':'visualization','version':'1','packages':['corechart']}]}"],
FetchExternalResources :["script", "link", "img"],
ProcessExternalResources: ["script"],
done: function (err, window) {
if(err){
console.log("err: " + err);
return;
}else{
console.log("Initiating charting...");
var google = window.google;
console.log("Google visualization: " + google.visualization);
window.docharting = function(err, obj){
console.log("err " + JSON.stringify(err) + ", obj: " + obj);
console.log("Starting chart drawing...");
// Create the data table.
var data = new google.visualization.DataTable();
data.addColumn('string', 'Topping');
data.addColumn('number', 'Slices');
data.addRows([
['Mushrooms', 3],
['Onions', 1],
['Olives', 1],
['Zucchini', 1],
['Pepperoni', 2]
]);
// Set chart options
var options = {'title':'How Much Pizza I Ate Last Night',
'width':400,
'height':300};
d = window.document;
elm = d.getElementById('map');
console.log("Got map container " + el + ", starting chart rendering...");
// Instantiate and draw our chart, passing in some options.
var chart = new google.visualization.PieChart(elm);
google.visualization.events.addListener(chart, 'ready', function () {
console.log("Chart ready, capturing image uri");
imageURI = chart.getImageURI();
console.log(imageURI);
});
console.log("Data ready, starting drawing...");
chart.draw(data, options);
console.log("Done drawing");
}
if(google){
//google.load("visualization", "1", {packages:["corechart"]});
//google.setOnLoadCallback(function(){
// console.log("Google onload callback called");
// window.docharting();
//});
window.docharting();
}else{
console.log("Google apis did not initialize properly");
}
}
}
});