1

我的 IE 8 页面出现以下错误(该页面在其他浏览器中运行良好)。

User Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; InfoPath.3)
Timestamp: Wed, 10 Sep 2014 06:48:45 UTC

Message: Object doesn't support this property or method
Line: 70532
Char: 5
Code: 0

当我检查提到的文件中的第 70532 行时,我看到了这段代码:

if (!Object.create && !Object.create(null).hasOwnProperty) {
      throw new Error("This browser does not support Object.create(null), please polyfil with es5-sham: http://git.io/yBU2rg");
    }

Please polyfil with es5-sham是什么意思:

 Please polyfil with es5-sham: http://git.io/yBU2rg

在此处输入图像描述

我该如何解决这个错误。

4

2 回答 2

4

Object.createIE8 不支持,因此您的框架要求您“polyfil”它,这意味着您需要实现本应本机支持的东西,但由于某种原因,这个特定环境不知道它。

这意味着,如果你想使用Object.create你必须自己实现它。幸运的是,您不必做太多事情,网址 ( https://github.com/es-shims/es5-shim/blob/master/es5-sham.js ) 指向一个包含必要 polyfill 的文件。只需在框架脚本之前运行该脚本即可。

更新:
这条线对我来说似乎坏了:!Object.create && !Object.create(null).hasOwnProperty
如果Object.create不存在,那么调用它Object.create(null)应该会引发错误,但我认为它应该类似于“未定义不是函数”。

于 2014-09-10T08:09:05.157 回答
1

我发现了另一个在我的场景中工作的 polyfil。我在这个链接上找到了答案。

我正在添加该链接的代码表单

if (!Object.create) {
    Object.create = function(proto, props) {
        if (typeof props !== "undefined") {
            throw "The multiple-argument version of Object.create is not provided by this browser and cannot be shimmed.";
        }
        function ctor() { }
        ctor.prototype = proto;
        return new ctor();
    };
}

添加此代码似乎对我有用。我所做的唯一更改是,我注释了引发异常的代码,因为它导致另一个错误。

于 2014-09-10T08:59:22.440 回答