我的网页在IE9,Safari,Chrome和& Firefox浏览器。
但当它与IE10同步时,它会抛出错误: 无法获取未定义或空引用的属性“原型” 在d3.v3.js at line: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块中,即使我们可以在d3_document.createElement("div").style
的调试器中看到setProperty方法
它抛出错误:
Object不支持属性或方法'setProperty'
在catch块中,它尝试访问窗口CSSStyleDeclaration
的原型,但这是未定义的。
使用d3.v3.js
时,任何人都遇到了同样的问题答案 0 :(得分:51)
可以使用DOCTYPE
:
<!DOCTYPE html>
meta
代码:
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
如果没有这些,IE将进入怪癖模式而不理解CSSStyleDeclaration
是什么。
答案 1 :(得分:1)
曾经随机发生的同样的问题,经过一些研究我得出结论,它设置无效的css属性(从IE的角度来看)导致它,在我的情况下:
someSvg.append('svg:text')
.text(function (d) { return d.label; })
.attr('text-anchor', 'left')
应该在哪里
.attr('text-anchor', 'start')
所以我的建议是审查所有的scritpt-stylings,甚至更好 - 将它们完全转移到css。经过这样的修复,它应该像IE9 +中的魅力一样工作
答案 2 :(得分:-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
}