Play Framework不会运行内联JavaScript

时间:2018-02-14 16:16:45

标签: javascript html scala playframework

我正在尝试使用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

但那也没有用。我还能尝试什么?

2 个答案:

答案 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是我的应用程序所在的主机名。