【问题标题】:Elegant way to include es6-promise for IE为 IE 包含 es6-promise 的优雅方式
【发布时间】:2018-01-12 13:31:23
【问题描述】:

由于Promise 在所有IE 版本中都是not support,我想让IE 用户下载HTML 中的pollyfill。

<!--[if IE]>
<script src="//cdnjs.cloudflare.com/ajax/libs/es6-promise/4.1.1/es6-promise.min.js"></script>
<![endif]-->

但是,conditional comments are not supported 在 IE 10 和 11 中。所以上面的代码在 IE 10 和 11 中不起作用。

然后,Microsoft 提供了一种解决方法。

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

这使得 IE 10 和 11 的行为类似于 IE 9。

但我的网站只能在 IE 10+ 中运行。所以这个解决方案不适合我。 有没有其他方法可以解决这个问题?

【问题讨论】:

  • 您是否尝试仅在 ie 请求 .js 文件?
  • @guest271314 "我想让 IE 用户下载一个 pollyfill"
  • @Bergi 您引用了要求,然后继续超出了您在回答中引用的边界?如果对您引用的实际问题不严格,该解决方案应该提供一种实现预期结果的方法。
  • @guest271314 需求不是边界。我正在尝试解决问题,而不是从字面上理解。
  • @Bergi 是的,但是为什么在不需要文件的浏览器中加载.js 文件?您可以检查document.body.style 以获取MS 前缀属性,然后如果条件为true 则请求文件。字面解释避免了对特定要求或主题的歧义。特异性。

标签: javascript ecmascript-6 promise


【解决方案1】:

随便用

<script>
    if (typeof Promise !== "function")
        document.write('<script src="//cdnjs.cloudflare.com/ajax/libs/es6-promise/4.1.1/es6-promise.min.js"><\/script>');
</script>

它不仅适用于 IE 用户,而且适用于没有原生 Promise 实现的所有环境。

【讨论】:

  • document.write 加载的脚本将是 blocked in chrome。 chrome 没问题,因为 chrome 已经有了承诺。其他浏览器有这个问题吗?
  • @cwtuan OPs &lt;script&gt; 标签也被同步加载,所以这是故意的。如果您想避免被广告定位功能阻止,您必须使用非 CDN 版本的 polyfill。
  • 这创建了一个名为 ES6Promise 而不是 Promise 的函数。
【解决方案2】:

没有外部脚本也一样

var lPromise = function(handler) {
  if (typeof Promise === "function")
    return new Promise(handler);
  var self = this;
  self._handler = handler;
  this.then = function(onFulfilled, onRejected) {
    this._handler(onFulfilled, onRejected);
  }
  return self;
}
this.Promise = function(handler) {
  return new lPromise(handler);
}

【讨论】:

    猜你喜欢
    • 2016-12-03
    • 1970-01-01
    • 2019-10-23
    • 2017-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    • 2011-06-09
    相关资源
    最近更新 更多