【问题标题】:Check basic ES6 support without "unsafe-eval"检查没有“unsafe-eval”的基本 ES6 支持
【发布时间】:2018-02-27 09:36:13
【问题描述】:

我想知道浏览器是否支持 ECMAScript 6 (ES6)(基本支持就足够了),但我也想使用合理的内容安全策略 (CSP) 标头。我到目前为止的解决方案,请参阅“Check if a browser supports ES6”,需要'unsafe-eval'。回答“Javascript ES6 cross-browser detection”的解决方案也是如此。有办法解决这个问题吗?

    var supportsES6 = function() {
      try {
        new Function("(a = 0) => a");
        return true;
      }
      catch (err) {
        return false;
      }
    }();

【问题讨论】:

  • 只要控制了传递给new Function的字符串(这里显然就是这样),就不是不安全的。请注意,对 ES6 的支持不是是/否的事情:ES6 涉及许多不同的方面,而 JavaScript 引擎通常支持少数、部分或许多 ES6 相关功能。
  • 不使用unsafe-eval 对我来说听起来很合理。如果你想使用eval,那很好。无论如何,不​​允许它并不能真正使您的页面更加安全。
  • @trincot 如何使用内容安全策略表达“它不是不安全的”机器可读的?
  • 就像我之前说的,ES6 支持不是一个是/否的事情。你写的基本支持就够了?这意味着什么?据我所知,没有“基本”标准。 JS 引擎的支持各不相同。
  • @DamianYerrick 我仍然认为前一个副本的公认答案完美地回答了这个问题:“新引入的语法(如箭头函数)的特征检测只能使用 eval() 函数完成或其他等价物”。如果您不寻求语法支持,它会继续解释原因并列出一些合理的替代方案。

标签: javascript ecmascript-6 content-security-policy


【解决方案1】:

我假设您想要检测 es6 支持的原因是决定是否交付 es6 代码或 es5 或显示错误。最简单的方法是使用 es 模块系统

<script type="module" src="script.es6.js"></script>
<script nomodule src="script.es5.js"></script>

支持es6的浏览器会加载script.es6.js并忽略script.es5.js,不支持es6的浏览器会忽略script.es6.js并加载script.es5.js

【讨论】:

    猜你喜欢
    • 2010-11-04
    • 1970-01-01
    • 1970-01-01
    • 2016-11-15
    • 1970-01-01
    • 2012-09-16
    • 2020-06-07
    • 1970-01-01
    • 2015-07-20
    相关资源
    最近更新 更多