【问题标题】:What can I do if nothing is supported on IE?如果 IE 不支持任何内容,我该怎么办?
【发布时间】:2017-12-23 02:34:23
【问题描述】:

我有一个在 Chrome/Firefox 上完美运行的箭头功能,但我还需要它在 IE11 上运行,我不知道还能做什么。

Here 你可以看到 IE11 不支持箭头函数,所以我尝试将我的代码从 ES6 更改为 ES5 here 因为我读到这样做可以解决问题(在链接上你可以还要检查我的代码 :) 以删除箭头功能。

Object.entries 也不支持,我仍然需要它。 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/entries

所以我尝试使用上面链接的 polyfill,但它使用的 Reflect 也不支持。 https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/Reflect

有什么想法吗?我真的迷失了 IE11 开发。 PD:代码仍在 Chrome/Firefox 上运行。

【问题讨论】:

  • 您需要一个 transpiler 将您的 ES6 代码转换为旧版浏览器可以理解的“oldschool” JS。
  • 您已确定需要做的事情:使用受支持的功能。您有特定问题吗? (听起来你可以把它变成一个关于如何在 ES5 中重现 Object.entries 的问题,但就目前而言,它的定义很差而且太宽泛)。
  • 如果你想支持旧版浏览器,你必须编写在旧版浏览器中工作的代码。 ES6 中的所有新方法都可以用其他方式编写,使您的代码可以在旧版浏览器中运行。
  • 也许找Object.keys()
  • 为什么您使用的功能甚至不是当前 ECMAScript (2017) 规范的一部分,并期望它们在 3 个 ECMAScript 版本之前发布的浏览器中工作?为 Object.entries 编写自己的 polyfill 应该不难。

标签: javascript ecmascript-6 ecmascript-5


【解决方案1】:

babelbabel preset env 将是可行的方法。

这样你可以只列出你打算支持的浏览器,然后 babel 只会转译(将你的代码片段转换为 ES5)需要转换以支持所有浏览器的部分代码。

【讨论】:

    【解决方案2】:

    您可以使用多种解决方案来实现在旧浏览器中支持新的 ES8+ 功能。

    全电路解决方案可以基于 Webpackbabel-transformers 和一组 polyfills,也称为 shims。您可以在 create-react-appnext.js 样板中看到典型配置。

    此外,如果您在开发机器上没有安装 IE11,您可以使用 TestCafe 或 NightWatch 等测试套件提供商在 SauseLabs 上运行 E2E/功能测试。

    【讨论】:

      【解决方案3】:

      这是 Object.entries 的幼稚实现。
      它适用于https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/entries中的所有示例

      Object.entries = Object.entries || function(obj) {
         return Object.keys(obj).map(function(k) {
             return [k, obj[k]];
         });
      };
      

      【讨论】:

      • 您阅读我的问题了吗?在您传递给我的同一个链接上,清楚地表明 Internet Explorer -> 不支持我试过但没有工作
      • 我不明白你的意思。我的实现不使用反射。请尝试一下,看看它是否有效。
      • 它是纯 ecmascript 5 实现,所以它应该在 IE11 中工作(顺便说一句,我在 IE11 中检查过它并且它确实有效)。不知道你在做什么,但你可能错了。因为你的态度,我放弃了。
      • @IXTRUnai 你读过答案了吗?它已经为不支持“条目”的浏览器应用了 polyfill。 He uses keys 在问题的 cmets 中已经提到。仍然没有答案,它是否适合你。
      • 天哪,对不起。这是真的,它正在工作。我不知道我以前做了什么。谢谢,对我的态度感到抱歉,我在这件事上待得太久了。
      猜你喜欢
      • 2016-01-20
      • 1970-01-01
      • 1970-01-01
      • 2011-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多