我使用了 eval,但通过应用 CSP 禁止它。但我正在寻找替代品。
我找到函数 jQuery.globaleval()
。
jQuery.readyException = function( error ) {
window.setTimeout( function() {
throw error;
});
};
抛出:
Uncaught EvalError: Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the following Content Security Policy directive: "script-src 'self' 'unsafe-inline' http://localhost:6060/WCUSTODY/ http://localhost:6060/application/scripts
那么,我们是否可以使用全局 eval 作为 eval 的替代方案,也应该被 CSP(内容安全策略)接受。
最佳答案
jQuery.globaleval()
与使用普通 JavaScript eval()
的行为不同,因为它是在全局上下文中执行的。例如
function test() {
jQuery.globalEval( "var newVar = true;" );
}
test();
名为newVar
的变量在全局范围内。它可以通过您的应用程序的脚本访问。
您可以在 CSP 中使用 eval()
而无需 jQuery.globaleval()
,方法是将 unsafe-eval 设置为允许的来源。
类似这样:
<meta http-equiv="Content-Security-Policy" content="script-src 'unsafe-eval'">
如果您不想使用 eval,则可以使用 new Function()
。根据最佳实践,您应该避免 eval()
和 new Function()
关于javascript - 我可以使用 jQuery globaleval 而不是 eval 来逃避内容安全策略吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57253511/
相关文章:
javascript - 如何在 Google TimeLine 图表中仅在一行中设置一个条形图(带
javascript - 在 Angular 6 中处理来自第三方 URL 的发布响应。无法发布错误
google-cloud-storage - 与 Google Cloud Storage 的连接池
python - 如何使用分类变量和数值变量绘制相关矩阵/热图
python-3.x - 属性错误 : 'NoneType' object has no attri
c# - EF Core - 无法添加具有相同相关对象的实体
typescript - VS代码/w。在 TypeScript Monorepo 中更漂亮
svelte - 将选定的 Svelte 组件编译为 CustomElements