web-dev-qa-db-fra.com

Erreur IE10 d3.v3.js: impossible d'obtenir la propriété 'prototype' de référence non définie ou nulle

Ma page se charge parfaitement dans IE9, Safari, Chrome & Firefox.

Mais quand il arrive à IE10, il renvoie une erreur: Impossible d'obtenir la propriété 'prototype' de référence non définie ou nulle dans d3.v3. js à la ligne: 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);
    };
  }

Je ne comprends pas exactement ce qui se fait ici.

Dans le bloc try, même si la méthode setProperty nous pouvons voir dans le débogueur sur d3_document.createElement("div").style il génère erreur comme: L'objet ne prend pas en charge la propriété ou la méthode 'setProperty'

Dans le bloc catch, il essaie d'accéder au prototype du CSSStyleDeclaration de la fenêtre, mais cela n'est pas défini.

Quelqu'un s'est produit avec le même problème lors de l'utilisation de d3.v3.js

19
vajrakumar

Cela peut être corrigé avec un DOCTYPE:

<!DOCTYPE html>

Et une balise meta:

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

Sans ceux-ci, IE passera en mode excentrique et ne comprendra pas ce qu'est CSSStyleDeclaration.

51
Langdon

J'ai eu le même problème qui se produisait au hasard, après quelques recherches, j'ai conclu qu'il définissait des propriétés CSS non valides (de IE point de vue) qui l'ont causé, dans mon cas: someSvg.append('svg:text') .text(function (d) { return d.label; }) .attr('text-anchor', 'left')

Où il aurait dû être

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

Donc, mon conseil serait de revoir tous les styles de scritpt, ou mieux encore - de les déplacer complètement en CSS. Après une telle correction, cela devrait fonctionner comme un charme dans IE9 +

1
Mateusz