【发布时间】: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