2013-03-04 4 views
18

La mia pagina si sta caricando perfettamente in IE9, Safari, Chrome & Firefox.Errore IE10 d3.v3.js: impossibile ottenere il "prototipo" di proprietà di riferimento non definito o nullo

Ma quando si coems ​​di IE10, getta l'errore: Impossibile ottenere la proprietà 'prototipo' di riferimento non definito o null in d3.v3.js alla riga: d3_window.CSSStyleDeclaration.prototype.

try { 
    d3_document.createElement("div").style.setProperty("opacity", 0, ""); 
    } catch (error) { 
    var d3_style_prototype = d3_window.CSSStyleDeclaration.prototype, d3_style_setProperty = d3_style_prototype.setProperty; 
    d3_style_prototype.setProperty = function(name, value, priority) { 
     d3_style_setProperty.call(this, name, value + "", priority); 
    }; 
    } 

Non riesco a ottenere esattamente ciò che viene fatto qui.

Nel blocco try, anche se il metodo setProperty possiamo vedere in debugger su d3_document.createElement("div").style si sta gettando errore come: L'oggetto non supporta la proprietà o il metodo 'setProperty'

Nel blocco catch cerca per accedere al prototipo di CSSStyleDeclaration della finestra, ma non è definito.

Chiunque si è verificato con lo stesso problema durante l'utilizzo d3.v3.js

+0

Sì, ho lo stesso problema ma non ho ancora trovato la soluzione. Potrebbe avere qualcosa a che fare con la mancanza di ICE di ECMA 5. Ho avuto un problema con Array.map https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/map – Peter

+0

Ho lo stesso errore, stessa linea con IE 9. Hai mai risolto questo? – balazs

risposta

48

Questo può essere risolto con un DOCTYPE:

<!DOCTYPE html> 

E un tag meta:

<meta http-equiv="X-UA-Compatible" content="IE=edge" /> 

Senza quelli, IE andrà in quirks mode e non capisco cosa sia CSSStyleDeclaration.

-1

Sembra che questo è un problema noto ed è improbabile che ottenere fisso.

https://groups.google.com/forum/?fromgroups=#!topic/d3-js/8lQ2BCR45BM

Il work-around è quello di caricare D3 selettivamente - questo funziona per me -

// load d3.js selectively 
try { 
      // if this doesnt throw an error then we can load d3.js 
      // this is known to fail in IE < 8 
      document.createElement("div").style.setProperty("opacity", 0, "") 

      var d3Script = document.createElement("script") 

      d3Script.src = "@Href("~/JavaScript/d3.js")" 

      d3Script.onload = function(){ 
       // do stuff 
      } 

      document.getElementsByTagName("head")[0].appendChild(d3Script) 
} catch(error) { 
      // upgrade your browser 
} 
1

Ha avuto lo stesso problema che ha usato per accadere a caso, dopo alcune ricerche ho concluso che è l'impostazione css valido proprietà (dal punto di vista IE) che ha causato, nel mio caso: someSvg.append('svg:text') .text(function (d) { return d.label; }) .attr('text-anchor', 'left')

Dove avrebbe dovuto essere

012.
.attr('text-anchor', 'start') 

Quindi il mio consiglio sarebbe quello di rivedere tutti gli stili da scritpt o, meglio ancora, spostarli completamente in css. Dopo tale correzione dovrebbe funzionare come fascino in IE9 +