2013-03-04 9 views
18

Moja strona ładuje się idealnie w przeglądarce IE9, Safari, Chrome & Firefox.Błąd IE10 d3.v3.js: Nie można uzyskać właściwości "prototypu" niezdefiniowanej lub zerowej referencji

Ale kiedy coems ​​do IE10, zgłasza błąd: Nie można uzyskać Własność 'prototyp' undefined lub null odniesienia w d3.v3.js na linii: 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); 
    }; 
    } 

Nie dowiem się, co dokładnie tu się dzieje.

W bloku try chociaż metoda setProperty widzimy debugger na d3_document.createElement("div").style to jest rzucanie błąd jak: Obiekt nie obsługuje właściwość lub metoda „setProperty”

W bloku catch stara aby uzyskać dostęp do prototypu okna CSSStyleDeclaration, ale jest to niezdefiniowane.

ktoś wystąpił z tym samym problemem podczas korzystania d3.v3.js

+0

Tak, mam ten sam problem, ale jeszcze nie znalazłem rozwiązania. Może mieć coś wspólnego z brakiem IE ECMA 5. Miałem problem z Array.map https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/map – Peter

+0

Mam to samo błąd, ta sama linia przy użyciu IE 9. Czy kiedykolwiek to rozwiązałeś? – balazs

Odpowiedz

48

ta może być ustalona z DOCTYPE:

<!DOCTYPE html> 

a meta tagu:

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

bez tych, czyli przejdzie w tryb quirks i nie rozumiem, czym jest CSSStyleDeclaration.

-1

Wygląda na to, że jest to znany problem i mało prawdopodobne, aby uzyskać stałe.

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

Prace wokół jest załadowanie D3 selektywnie - to działa na mnie -

// 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

Gdyby sam problem który kiedyś zdarzyć przypadkowo, po kilku badań doszedłem do wniosku, że to ustawienie nieprawidłowy css właściwości (od IE punktu widzenia), który spowodował to, w moim przypadku: someSvg.append('svg:text') .text(function (d) { return d.label; }) .attr('text-anchor', 'left')

Gdzie powinno być

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

Więc moja rada to przegląd wszystkich stylizacji od zera, lub jeszcze lepiej - przeniesienie ich do css całkowicie. Po takiej poprawki powinna działać jak czar w IE9 +

Powiązane problemy