无法使GWT应用程序作为Chrome打包的应用程序工作,可能是由于CSP

无法使GWT应用程序作为Chrome打包的应用程序工作,可能是由于CSP,gwt,google-chrome-extension,content-security-policy,Gwt,Google Chrome Extension,Content Security Policy,不断获取CSP错误:“拒绝执行内联脚本,因为它违反了以下内容安全策略指令:“script src'self” 问题可能是由于GWT生成的HTML文件包含内联JS UPD:更改为清单版本1有帮助,但这是一个临时解决方案,因为Chrome 21抱怨它将不再受支持 UPD2:也没有帮助清单版本2不允许内联脚本。您需要确保所有脚本都链接,HTML元素中没有JavaScript。编辑:报告的新GWT错误:,另请参阅与此错误相关的内容 换句话说,修复后,您只需使用DirectInstallLinker(),

不断获取CSP错误:“拒绝执行内联脚本,因为它违反了以下内容安全策略指令:“script src'self”

问题可能是由于GWT生成的HTML文件包含内联JS

UPD:更改为清单版本1有帮助,但这是一个临时解决方案,因为Chrome 21抱怨它将不再受支持


UPD2:
也没有帮助

清单版本2不允许内联脚本。您需要确保所有脚本都链接,HTML元素中没有JavaScript。

编辑:报告的新GWT错误:,另请参阅与此错误相关的内容


换句话说,修复后,您只需使用
DirectInstallLinker
),GWT 2.5.1终于修复了此问题。记录此问题的发行说明如下:

他们说:

“使用DirectInstallLinker构建的应用程序应在禁止内联脚本的页面中运行(例如,Chrome扩展)”

这意味着现在可以使用DirectInstallLinker以满足清单版本2关于内联脚本的新安全要求的方式链接您的Chrome打包应用程序。也就是说,通过使用DirectInstallLinker链接您的应用程序,并选择GWT 2.5.1作为您的GWT版本,GWT不会内联放置任何脚本元素在其生成的Javascript中,因此不会违反新的清单版本2中没有内联脚本的要求

我发现SingleScriptLinker似乎也适用于我自己的应用程序;但是,第7685期警告不要使用SingleScriptLinker,因为“这会生成$doc.write行,这在打包应用程序中是禁止的。”我自己也在使用DirectInstallLinker

以下是DirectInstallLinker的Javadoc:

要使用此链接器,可以在*.gwt.xml文件中包含以下内容:

<define-linker name="dil" class="com.google.gwt.core.linker.DirectInstallLinker"/>
<add-linker name="dil" />
<define-linker name="csp" class="com.sfeir.linker.CSPCompatibleLinker"/>
<add-linker name="csp" />

在您的manifest.json文件中,由于GWT生成的内联Javascript,您不会遇到任何错误。这应该允许您的Chrome Web应用程序被Chrome Web应用商店接受(现在,任何新应用程序或当前应用程序的更新都需要manifest版本2),只要没有其他问题。

多亏了Thomas Broyer的建议。我创建了这个GWT链接器。现在,我的GWT应用程序作为Chrome应用程序运行得非常完美(在Chrome 32和GWT 2.5.1上进行了测试)

公共类CSPCompatibleLink扩展了DirectInstallLinker{

@Override
protected String getJsInstallLocation(LinkerContext context) {
    return "com/google/gwt/core/ext/linker/impl/installLocationMainWindow.js";
} 
}

不要忘记将链接器声明到*.gwt.xml文件中:

<define-linker name="dil" class="com.google.gwt.core.linker.DirectInstallLinker"/>
<add-linker name="dil" />
<define-linker name="csp" class="com.sfeir.linker.CSPCompatibleLinker"/>
<add-linker name="csp" />


下面的Mike Grace是正确的,您理解问题所在。您可以破解GWT的后处理器,将内联脚本标记转换为JS文件,但这很难看。相反,我现在只想坚持使用清单1(Chrome尚未弃用它),并敦促GWT人员修复他们的代码。谷歌有关于这一主题的新闻(Chrome的DevMode插件必须更新为清单版本2,以部署到Chrome Web应用商店,并且它本身包含一个用于管理配置的GWT应用程序)。请参阅下面我编辑的答案。检查此问题:只要您不需要gwt代码b/c沙盒页面中的跨站点XHR,此选项就可以使用。请参阅gwt webstarter项目不起作用-至少文本框和按钮没有显示。您是否有公开的示例,我们可以查看。Chrome扩展正在运行king with com.google.gwt.core.linker.SingleScriptLinker。不,很抱歉,我没有使用webstarter项目。您是否有一个示例代码,我可以查看打包应用程序从其他服务器(RESTful或其他形式的CSP)提取数据的位置很抱歉,我没有这样的示例。这个问题只涉及配置GWT,以便它不会在编译的Javascript中生成内联脚本,这与它是仅为客户端还是为与服务器通信生成代码是正交的。这真的有效吗?我总是遇到这个问题: