2016-02-22 30 views
8

Mam naprawdę dziwny problem z initilization d3.js. W skrypcie d3.js, na samym początku, próbuje dostać var d3_document = this.document; ale pojawia się następujący błąd:D3.js: Uncaught TypeError: Nie można odczytać właściwości "dokumentu" o niezdefiniowanym

Uncaught TypeError: Cannot read property 'document' of undefined 

podczas debugowania, this.document powraca niezdefiniowane.

Używam yo webapp do generowania projektu. Używa altruna jako menedżera pakietów i łyka dla procesu budowania (który używa babel dla funkcji ES2015).

Zabawne jest to, że przetestowałem je z xampp i działa dobrze!

Byłbym wdzięczny za radę! Thnx!

+0

Dobre szczegóły dotyczące konfiguracji. Bez tych szczegółów nie mogłem odpowiedzieć na to pytanie. –

Odpowiedz

9

To brzmi jak coś (najprawdopodobniej Babel) wstawia "use strict"; na początku pliku skryptu D3 lub łączy go z innym plikiem z "use strict" u góry. Oznacza to, że this w zasięgu globalnym (lub w funkcji o nazwie bez konkretnej this) nie jest już odniesieniem do obiektu globalnego, to jest undefined. (Podczas gdy w trybie „luźne” lub w funkcji o nazwie bez określonej wartości this, this w zasięgu globalnym jest odniesienie do globalnego obiektu, który jest również dostępny za pośrednictwem globalnej zmiennej `oknie Window1.)

trzeba usunąć twoja d3.js z listy skryptów przekształcanych przez Babel i po prostu włącz ją tak jak jest. Zakładając, że używasz normalnego d3.js plik wygląda tak:

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

który opiera się na prowadzony w trybie luźnym.

+0

Thnx, zdecydowanie jest to babel, który dołącza 'use restrict'' do skryptów. Dla każdego, kto ma ten sam problem, przejdź [tutaj] (http://stackoverflow.com/questions/33821312/how-to-remove-global-use-strict-added-by-babel), aby dowiedzieć się, jak rozwiązać ten problem w Babel 5 i babel 6. –

Powiązane problemy