2016-02-22 15 views
8

d3.jsの初期化で本当に奇妙な問題が発生しました。 d3.jsスクリプトでは、一番最初に、それはvar d3_document = this.document;を取得しようとしますが、それは次のエラーをポップ:D3.js:Uncaught TypeError:未定義のプロパティ 'document'を読み取ることができません

Uncaught TypeError: Cannot read property 'document' of undefined 

デバッグ、this.document戻り未定義。

私はyo webappを使用してプロジェクトを生成しています。これはパッケージマネージャとしてbowerを使用し、ビルドプロセス(ES2015の機能にはbabelを使用)に使用されます。

面白いことに、私はxamppでテストして、うまくいきます!

私はいくつかのアドバイスをありがとう!Thnx!

+0

セットアップの詳細。その詳細がなければ、私はその質問に答えることができなかった。 –

答えて

9

D3スクリプトファイルの冒頭に"use strict";が挿入されているか、最上部に「use strict」が付いた別のファイルに結合されているようです(Babel、おそらく)。つまり、グローバルスコープのthis(または特定のthisという関数なしで呼び出された関数)は、もはやグローバルオブジェクトへの参照ではなく、undefinedです。 (「ルーズ」モードで又は全く特定this値で呼び出される関数のに対して、グローバルスコープでthisはまた、グローバル変数 `WINDOW1を介してアクセス可能なグローバルオブジェクトへの参照である。)削除する必要

あなたのd3.jsは、Babelによって変形されているスクリプトのリストに含まれています。

!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... 
    // ... 
    // ... 
}(); 

緩いモードで実行されているに依存している:あなたは、通常のd3.jsファイルを使用していると仮定すると、それはこのようになります。

+0

Thnx、間違いなくスクリプトに '' use restrict''を付加するのは間違いです。この同じ問題を抱えている人は、[こちら](http://stackoverflow.com/questions/33821312/how-to-remove-global-use-strict-added-by-babel)にアクセスして、バベルで解決する方法を知ってください5とバベル6。 –

関連する問題