d3.js启动时我遇到了一个非常奇怪的问题。在d3.js脚本中,它一开始就尝试获取var d3_document = this.document;
,但会弹出以下错误:
Uncaught TypeError: Cannot read property 'document' of undefined
调试时,this.document
返回undefined。
我正在使用yo webapp
来生成项目。它使用bower作为包管理器和gulp用于构建过程(使用babel作为ES2015功能)。
有趣的是我用xampp测试了它并且工作正常!
我很感激一些建议!Thnx!
答案 0 :(得分:12)
听起来像是(Babel,很可能)在D3脚本文件的开头插入"use strict";
或将其组合到另一个顶部带有“use strict”的文件中。这意味着this
在全局范围内(或在没有特定this
的情况下调用的函数)不再是对全局对象的引用,它是undefined
。 (在“松散”模式或在没有特定this
值的函数中,this
在全局范围内是对全局对象的引用,也可以通过全局变量`window1访问。
您需要从Babel转换的脚本列表中删除d3.js
,并按原样包含它。假设您正在使用普通的d3.js
文件,它看起来像这样:
!function() {
var d3 = {
version: "3.5.16"
};
var d3_arraySlice = [].slice, d3_array = function(list) {
return d3_arraySlice.call(list);
};
var d3_document = this.document;
// ...
// ...
// ...lots of stuff here...
// ...
// ...
}();
这依赖于以松散模式运行。