Ответ 1
Это можно исправить с помощью DOCTYPE
:
<!DOCTYPE html>
И тег meta
:
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
Без них IE перейдет в режим quirks и не поймет, что такое CSSStyleDeclaration
.
Моя страница отлично загружается в IE9, Safari, Chrome и Firefox.
Но когда он соединяется с IE10, он выдает ошибку: Не удалось получить свойство 'prototype' из undefined или null reference в d3.v3.js в строке: 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);
};
}
Я не понимаю, что именно делается здесь.
В блоке try, хотя метод setProperty можно увидеть в отладчике на d3_document.createElement("div").style
это бросает ошибку как:
Объект не поддерживает свойство или метод 'setProperty'
В блоке catch он пытается получить доступ к прототипу окна CSSStyleDeclaration
, но это undefined.
Кто-то сталкивался с одной и той же проблемой при использовании d3.v3.js
Это можно исправить с помощью DOCTYPE
:
<!DOCTYPE html>
И тег meta
:
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
Без них IE перейдет в режим quirks и не поймет, что такое CSSStyleDeclaration
.
Если бы такая же проблема случалась случайным образом, после некоторых исследований я пришел к выводу, что она устанавливает недопустимые свойства css (с точки зрения IE), которые вызвали ее, в моем случае: someSvg.append('svg:text')
.text(function (d) { return d.label; })
.attr('text-anchor', 'left')
Где он должен был быть
.attr('text-anchor', 'start')
Таким образом, мой совет будет состоять в том, чтобы просмотреть все стили из-scritpt или, что еще лучше, переместить их в css полностью. После такого исправления он должен работать как прелесть в IE9 +
Похоже, это известная проблема, и вряд ли она будет исправлена.
https://groups.google.com/forum/?fromgroups=#!topic/d3-js/8lQ2BCR45BM
Обход - это выборочно загружать d3 - это работает для меня -
// 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
}