我正在尝试使用play framework 2.6和scala设置一个简单的应用程序,我似乎无法在我的html模板中运行内联javascript。我一直收到错误:
拒绝执行内联脚本,因为它违反了以下内容安全策略指令:"默认-src' self'"。 “不安全 - 内联”和“不安全”。关键字,哈希(' sha256-DdH / amfJizOgk2xZ + Xst5j13qHxPYrrrfT6x / TzfYiA =')或nonce(' nonce -...')是启用内联执行所必需的。另请注意' script-src'没有明确设置,所以' default-src'被用作后备。
我的scala代码是:
package controllers
import javax.inject._
import play.api._
import play.api.mvc._
import play.twirl.api.Html
class HomeController @Inject()(cc: ControllerComponents) extends
AbstractController(cc) {
def index() = Action { implicit request: Request[AnyContent] =>
Ok(views.html.main("Hello World"))
}
}
我的html.main.html文件如下:
@(title: String)
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Security-Policy" content="default-src 'self'">
<title>@title</title>
<link rel="stylesheet" media="screen"
href="@routes.Assets.versioned("stylesheets/main.css")">
<link rel="shortcut icon" type="image/png"
href="@routes.Assets.versioned("images/favicon.png")">
</head>
<body>
<script type = "text/javascript">
document.write("Check");
</script>
<script src = "@routes.Assets.versioned("javascripts/main.js")" type =
"text/javascript"></script>
</body>
</html>
理想情况下,它应该打印&#34;检查&#34;在我通过本地主机连接时在屏幕上。我尝试将我的application.conf文件更改为
play.filters.headers.contentSecurityPolicy = null
但那也没有用。我还能尝试什么?
答案 0 :(得分:3)
在
play.filters.headers.contentSecurityPolicy = null
是正确的,现在删除
<meta http-equiv="Content-Security-Policy" content="default-src 'self'">
然后它必须按预期工作
答案 1 :(得分:1)
避免此问题的最佳方法是使用包含代码的额外javascript文件。但我有一个类似的问题,并通过在我的application.conf中设置一个非常长的策略来解决它。
play.filters.headers.contentSecurityPolicy = "default-src 'self';script-src 'self' https://my-site.com 'unsafe-inline';style-src 'self' https://my-site.com;font-src 'self' https://my-site.com;img-src 'self' https://my-site.com data:"
my-site.com是我的应用程序所在的主机名。