Bootstrap.min.js(v3.4)是否兼容移除unsafe-eval的CSP策略?
Bootstrap 3.4 移除
unsafe-eval后的CSP兼容性分析 核心问题拆解
CSP中的unsafe-eval管控的是动态代码执行行为,包括:
- 直接调用
eval()、new Function() - 使用字符串参数的
setTimeout("代码字符串", 延迟)或setInterval("代码字符串", 延迟)
而普通传入函数引用的setTimeout(function() {}, 延迟)属于安全调用,不受unsafe-eval限制。
Bootstrap 3.4的CSP兼容性结论
Bootstrap 3.4本身不依赖eval或动态函数构造,源码中所有的setTimeout/setInterval调用均采用函数引用的方式,因此理论上完全兼容移除unsafe-eval的CSP策略。
针对你遇到的部分setTimeout失效问题的排查方向
你观察到的后续setTimeout无法运行,大概率不是Bootstrap本身导致的,建议从以下几点排查:
- 检查AngularJS的CSP配置:
AngularJS默认会使用eval解析表达式,必须在根元素添加ng-csp指令(如<html ng-app="myApp" ng-csp>),强制AngularJS切换到非eval的解析模式,否则会触发CSP违规,可能表现为依赖定时器的组件失效。 - 查看控制台的CSP报错详情:
打开浏览器开发者工具的控制台,找到CSP相关的报错信息,里面会明确指出是哪一行代码触发了unsafe-eval违规(比如是AngularJS的表达式解析、还是项目中其他第三方库的代码)。 - 排查项目中的其他依赖:
确认是否有其他第三方库(比如jQuery插件、自定义指令)使用了动态代码执行,导致CSP限制生效后影响了Bootstrap组件的定时器逻辑。
验证步骤
- 给AngularJS根元素添加
ng-csp指令。 - 移除CSP中的
unsafe-eval,保留script-src 'self' http: https: 'unsafe-inline'(Bootstrap 3.4需要unsafe-inline处理内联样式/脚本)。 - 重新运行项目,检查控制台是否还有CSP报错,同时测试Bootstrap的所有组件(模态框、工具提示、轮播等)的定时器相关功能是否正常。
内容的提问来源于stack exchange,提问作者Abhishek Sharma
相关产品推荐
相关产品推荐

