IE10 d3.v3.erreur js: impossible d'obtenir la propriété 'prototype' de référence non définie ou nulle
Ma page est en cours de chargement parfaitement dans IE9, Safari, Chrome Et Firefox.
mais quand il coems à IE10 , il jette l'erreur : impossible d'obtenir la propriété 'prototype' de référence non définie ou nulle d3.v3.js sur la ligne : d3_window.Cssstyledéclaration.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);
};
}
Je ne comprends pas exactement ce qui se fait ici.
dans le bloc d'essai même si la méthode setProperty est visible dans le débogueur sur d3_document.createElement("div").style
il est à jeter erreur comme :
Objet ne prend pas en charge la propriété ou de la méthode setProperty'
dans le bloc catch il essaie d'accéder au prototype des fenêtres CSSStyleDeclaration
, mais c'est indéfini.
Quelqu'un a eu le même problème en utilisant d3.v3.js
3 réponses
Cela peut être corrigé avec un DOCTYPE
:
<!DOCTYPE html>
Et meta
balise:
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
sans ceux-ci, IE va passer en mode bizarreries et ne pas comprendre ce que CSSStyleDeclaration
est.
avait le même problème qui se produisait au hasard, après quelques recherches j'ai conclu que c'est le réglage des propriétés CSS invalides (du point de vue D'IE ) qui l'a causé, dans mon cas:
someSvg.append('svg:text')
.text(function (d) { return d.label; })
.attr('text-anchor', 'left')
là Où il devrait avoir été
.attr('text-anchor', 'start')
donc mon conseil serait de passer en revue tous les-scritpt-stylings, ou encore mieux - les déplacer à css complètement. Après une telle correction, il devrait fonctionner comme le charme dans IE9+
il semble que ce soit un problème connu et peu susceptible d'être corrigé.
https://groups.google.com/forum/?fromgroups=#!topic/d3-js/8lQ2BCR45BM
Le travail est à la charge d3 de façon sélective, cela fonctionne pour moi -
// 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
}