【问题标题】:Can I detect async/await available in browser? [duplicate]我可以检测到浏览器中可用的异步/等待吗? [复制]
【发布时间】:2018-02-17 23:59:51
【问题描述】:

作为标题,如何检测浏览器中的 async/await es7 支持?

这可能吗?

【问题讨论】:

标签: javascript syntax async-await ecmascript-2017


【解决方案1】:

目前还没有完美的解决方案,但可以使用eval

let isAsyncSupported;

try {
  isAsyncSupported = eval(`typeof Object.getPrototypeOf(async function() {}).constructor === 'function'`);
} catch (exception) {
  isAsyncSupported = false;
}

更多请看:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/AsyncFunction

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function

【讨论】:

    【解决方案2】:

    与任何其他句法特征一样,它应该被评估以便被检测到。由于eval 可以被限制,所以在启用 CSP 时这可能是不可能的:

    let isAsync = true;
    
    try {
      eval('async () => {}');
    } catch (e) {
      if (e instanceof SyntaxError)
        isAsync = false;
      else
        throw e; // throws CSP error
    }
    

    如果目标浏览器可能不支持某个功能,则应转译代码。

    允许避免对eval 的 CSP 限制的替代方法是使用外部脚本来检测语法特征,as described here

    【讨论】:

      猜你喜欢
      • 2012-03-05
      • 2016-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多