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

19
demandé sur vajrakumar 2013-03-04 11:31:50

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.

49
répondu Langdon 2013-08-09 16:00:26

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+

1
répondu Mateusz 2013-04-11 14:10:56

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
}
-1
répondu Peter 2013-03-18 10:48:15