没有eval()

时间:2016-10-25 10:47:22

标签: javascript aurelia systemjs

我有一个工作的Aurelia SPA网络应用程序,但如果我在我的web.config中设置Content-Security-Policy选项,就像这样

<add name="X-Content-Security-Policy" value="default-src 'none'; frame-src 'self'; script-src 'self' https://code.jquery.com; connect-src 'self' https://*.core.windows.net; img-src 'self' data:; style-src 'self' https://fonts.googleapis.com 'unsafe-inline'; font-src https://fonts.gstatic.com 'self';"></add>

我在页面加载时出现此错误

Uncaught (in promise) Error: (SystemJS) 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' https://code.jquery.com".

我现在使用非捆绑版本加载页面,我得到的错误是

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 'unsafe-inline' 'self' https://code.jquery.com".

Evaluating https://localhost/jspm_packages/npm/aurelia-bootstrapper@1.0.0.js
Error loading https://localhost/jspm_packages/npm/aurelia-bootstrapper@1.0.0.js

与此同时,我将进一步研究SystemJS模块加载器。

更新

错误确实发生在SystemJS模块加载器中,因为在system.src.js中它使用eval(加上一些'新函数'定义,但我不会来那些代码行。 我的问题是:除了关闭Content-Security-Policy(或允许'unsafe-eval')之外,没有办法解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

Aurelia完全支持内容安全政策。如果您使用的是SystemJS,则需要对index.html进行以下更改,与Aurelia documentation中的入门示例相比:

使用SystemJS的CSP兼容production build

<script src="scripts/system-csp-production.js"></script>

请注意,使用SystemJS的CSP版本,只能运行捆绑的,否则将无法正常运行。您可能只想在生产中使用上面的行。

使用以下内容创建文件bootstrap.js:

System.import("aurelia-bootstrapper");

并使用以下行替换index.html中相同的内联调用:

<script src="scripts/bootstrap.js"></script>

Here是Aurelia项目的相关问题。