我有一个工作的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')之外,没有办法解决这个问题吗?
答案 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项目的相关问题。