IE10 d3.v3.js 错误:无法获取未定义或空引用的属性“原型”

Posted

技术标签:

【中文标题】IE10 d3.v3.js 错误:无法获取未定义或空引用的属性“原型”【英文标题】:IE10 d3.v3.js error: Unable to get property 'prototype' of undefined or null reference 【发布时间】:2013-02-18 05:59:40 【问题描述】:

我的页面在 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);
    ;
  

我不知道这里到底在做什么。

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

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

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

【问题讨论】:

是的,我有同样的问题,但我还没有找到解决方案。可能与 IE 缺少 ECMA 5 有关。我遇到了 Array.map developer.mozilla.org/en-US/docs/javascript/Reference/… 的问题 我有同样的错误,在同一行使用 IE 9。你解决过这个问题吗? 【参考方案1】:

这可以通过DOCTYPE 解决:

<!DOCTYPE html>

还有一个meta 标签:

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

没有这些,IE 将进入怪癖模式,不明白CSSStyleDeclaration 是什么。

【讨论】:

【参考方案2】:

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

它应该在哪里

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

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

【讨论】:

【参考方案3】:

这似乎是一个已知问题,不太可能得到解决。

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

【讨论】:

以上是关于IE10 d3.v3.js 错误:无法获取未定义或空引用的属性“原型”的主要内容,如果未能解决你的问题,请参考以下文章

Angular 2+:IE 11 无法获取未定义或空引用的属性“调用”

无法获取未定义或空引用的属性“id”

js运行错误 无法获取未定义或 null 引用的属性“pagecount”

IE下显示 JS 显示未定义

JavaScript 运行时错误: 无法设置未定义或 null 引用的属性"innerText"

IE9 JavaScript 错误:SCRIPT5007:无法获取属性“ui”的值:对象为空或未定义