IE WebBrowser控件不支持Javascript'map'?

时间:2014-02-03 22:17:09

标签: javascript c internet-explorer d3.js webbrowser-control

我正在尝试将d3(www.d3js.org)与来自C的Microsoft WebBrowser控件一起使用.d3使用Array中的Javascript“map”方法。从版本9开始,这是IE中的新功能。虽然IE10浏览器能够很好地处理d3,但WebBrowser控件却没有。

我通过我无法控制的第三方代码调用document.write()。它是ole_ie.c,你可以在网上找到它(参见'DisplayHTMLStr')。如果必须,我可以放弃它,但我宁愿不放弃。

这是一个测试字符串:

<!DOCTYPE html>
<head><meta http-equiv="X-UA-Compatible" content="IE=edge" ></meta>
<title>Get documentMode!</title>
</head>
<body>
<h2>document.documentMode</h2>
<p>
<script>
/*@cc_on @*/
document.write(document.documentMode);
alert(@_jscript_version);
var x = ['a'].map(function(a) {});
</script>
<p>
</body>

从文件运行时可以正常工作,但是当发送到WebBrowser(并且你关闭对话框)时,你会得到“对象不支持属性或方法'map'”。

我已将注册表项FEATURE_BROWSER_EMULATION设置为各种值(我看到它正在读取);最近的一次是0x2711。我也尝试过各种各样的X-UA兼容版。通过实验,我已经实现了5,7或8的documentMode。@ _ jscript_version是10.MSHTML.DLL版本是10.0.9200.16750。我正在使用Win7-64。

有人能让这个工作吗?

2 个答案:

答案 0 :(得分:0)

使用polyfill怎么样:

if (!Array.prototype.map)
{
  Array.prototype.map = function(fun /*, thisArg */)
  {
    "use strict";

    if (this === void 0 || this === null)
      throw new TypeError();

    var t = Object(this);
    var len = t.length >>> 0;
    if (typeof fun !== "function")
      throw new TypeError();

    var res = new Array(len);
    var thisArg = arguments.length >= 2 ? arguments[1] : void 0;
    for (var i = 0; i < len; i++)
    {
      if (i in t)
        res[i] = fun.call(thisArg, t[i], i, t);
    }

    return res;
  };
}

(来自https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

答案 1 :(得分:0)

解决方案是转向IE11。