D3.js:未捕获的TypeError:无法读取未定义的属性"文档"

Car*_*aya 10 javascript initialization undefined d3.js

d3.js启动时我遇到了一个非常奇怪的问题.在d3.js脚本中,在最开始时,它会尝试获取var d3_document = this.document;但会弹出以下错误:

Uncaught TypeError: Cannot read property 'document' of undefined
Run Code Online (Sandbox Code Playgroud)

调试时,this.document返回undefined.

我正在yo webapp用来生成项目.它使用bower作为包管理器和gulp用于构建过程(使用babel用于ES2015功能).

有趣的是,我用xampp测试了它,它工作正常!

我很感激一些建议!Thnx!

T.J*_*der 13

听起来像是(Babel,很可能)"use strict";在D3脚本文件的开头插入或者将其组合到另一个文件中,顶部是"use strict".这意味着this在全局范围内(或在没有特定的情况下调用的函数this)不再是对全局对象的引用,它就是undefined.(在"松散"模式下或在没有特定this值的函数中,this在全局范围内是对全局对象的引用,也可以通过全局变量`window1访问.)

您需要d3.js从Babel转换的脚本列表中删除您,并按原样包含它.假设您正在使用普通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...
  // ...
  // ...
}();
Run Code Online (Sandbox Code Playgroud)

这依赖于以松散模式运行.