首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >IE10 d3.v3.js错误:无法获取未定义引用或空引用的属性'prototype‘

IE10 d3.v3.js错误:无法获取未定义引用或空引用的属性'prototype‘
EN

Stack Overflow用户
提问于 2013-03-04 15:31:50
回答 3查看 41.5K关注 0票数 20

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

但是当它进入IE10时,它会抛出错误: Unable to get property 'prototype‘of undefined or null reference in 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时遇到同样的问题

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-10 00:00:26

可以使用DOCTYPE修复此问题

<!DOCTYPE html>

和一个meta标签:

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

如果没有这些,IE将进入怪癖模式,无法理解CSSStyleDeclaration是什么。

票数 51
EN

Stack Overflow用户

发布于 2013-04-11 22:10:57

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

它本该在的地方

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

因此,我的建议是检查所有的from-scritpt-stylings,或者更好的-将它们完全转移到css。经过这样的修复后,它应该会像IE9+中的护身符一样工作

票数 1
EN

Stack Overflow用户

发布于 2013-03-18 18:09:30

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

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
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15196622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档