2016-02-22 23 views
8

Sto avendo un problema davvero strano con l'inizializzazione di d3.js. Nello script d3.js, proprio all'inizio, si cerca di ottenere var d3_document = this.document; ma si apre il seguente errore:D3.js: Unchaught TypeError: Impossibile leggere la proprietà 'documento' di indefinito

Uncaught TypeError: Cannot read property 'document' of undefined 

durante il debug, this.document rendimenti indefinito.

Sto usando yo webapp per generare il progetto. Usa bower come gestore pacchetti e gulp per il processo di compilazione (che usa Babel per le funzionalità ES2015).

La cosa divertente è che l'ho provato con xampp e funziona benissimo!

Gradirei un consiglio! Thnx!

+0

Buoni dettagli sulla configurazione. Senza questo dettaglio, non avrei potuto rispondere alla domanda. –

risposta

9

Sembra qualcosa (Babel, molto probabilmente) sta inserendo "use strict"; all'inizio del file di script D3 o combinandolo in un altro file con "use strict" in alto. Ciò significa che lo this nell'ambito globale (o in una funzione chiamata senza uno specifico this) non è più un riferimento all'oggetto globale, è undefined. (Mentre in modalità "loose" o in una funzione chiamata senza valore specifico this, this allo scope globale è un riferimento all'oggetto globale, che è accessibile anche tramite la variabile globale `window1.)

È necessario rimuovere il tuo d3.js dall'elenco di script che vengono trasformati da Babel e basta includerlo così com'è. Supponendo che si sta utilizzando il normale file di d3.js, sembra che questo:

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

che si basa su di essere eseguito in modalità sciolto.

+0

Thnx, sicuramente è babele che aggiunge "usa restrizione" agli script. Per chiunque abbia questo stesso problema, vai [qui] (http://stackoverflow.com/questions/33821312/how-to-remove-global-use-strict-added-by-babel) per sapere come risolverlo in babel 5 e babele 6. –