20

我的页面在 IE9、Safari、Chrome 和 Firefox 中完美加载。

但是当它到 IE10 时,它会抛出错误: 无法 在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);
    };
  }

我没有得到这里到底在做什么。

在尝试块中,即使 setProperty 方法我们可以在调试器中看到d3_document.createElement("div").style 它抛出错误对象不支持属性或方法'setProperty'

在 catch 块中,它尝试访问 window 的原型CSSStyleDeclaration,但这是未定义的。

使用d3.v3.js时有人遇到同样的问题

4

3 回答 3

51

这可以通过以下方式解决DOCTYPE

<!DOCTYPE html>

还有一个meta标签:

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

没有这些,IE 将进入怪癖模式并且不知道是什么CSSStyleDeclaration

于 2013-08-09T16:00:26.250 回答
1

曾经随机发生过同样的问题,经过一些研究后我得出结论,在我的情况下,它设置了无效的 css 属性(从 IE 的角度来看)导致它: someSvg.append('svg:text') .text(function (d) { return d.label; }) .attr('text-anchor', 'left')

它应该在哪里

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

所以我的建议是审查所有来自脚本的样式,甚至更好 - 将它们完全移动到 css。经过这样的修复后,它应该在 IE9+ 中像魅力一样工作

于 2013-04-11T14:10:56.670 回答
-1

看起来这是一个已知问题,不太可能得到解决。

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
}
于 2013-03-18T10:09:30.020 回答