有谁知道,使用 Modernizr 或其他方式,是否有办法检测浏览器中是否启用了 Promise 功能?
我有一个用于该功能的 polyfill,但只想在浏览器没有本机实现的情况下应用它。
有谁知道,使用 Modernizr 或其他方式,是否有办法检测浏览器中是否启用了 Promise 功能?
我有一个用于该功能的 polyfill,但只想在浏览器没有本机实现的情况下应用它。
2016 年 12 月 11 日更新:所有常青版本的浏览器现在都支持 Promise。它们可以安全使用。
2016 年 11 月 14 日更新: Chrome、Firefox、Safari 和 IE 现在都在其开发通道中提供了对 Promise 的实验性支持。规范已经确定。我仍然不会依赖于实现,而是会使用一个库,但这可能会在几个月内改变。
没有浏览器以可靠的方式原生支持 Promise。规范可能会改变——至少再过几个月。我的建议是使用像 Bluebird 这样的快速承诺库。
如果您想检查是否启用了本机承诺 - 您可以执行以下操作:
if(typeof Promise !== "undefined" && Promise.toString().indexOf("[native code]") !== -1){
//here
}
正如其他人所建议的那样,只需检查是否有Promise
对象就可以完成,if(Promise)
但我强烈建议不要这样做,因为不同的库有不同的 API 用于创建 Promise 等。
当“Promise”未定义时抛出:
if (Promise)
// do code
这永远不会抛出:
if (window.Promise)
// do code
if (typeof Promise !== 'undefined')
// do code
是的,可以在浏览器环境中依赖 window 对象。
要创建“支持”标志而不携带对象引用:
var canPromise = !! window.Promise;
您可以尝试在一个try/catch
块中创建一个:
var promiseSupport = false;
try {
var promise = new Promise(function (x, y) {});
promiseSupport = true;
} catch (e) {}
检查promiseSupport
它是否失败。