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

2023-11-27

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

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

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

UPD2: <add-linker name="xsiframe" />也没有帮助


GWT 2.5.1 终于解决了这个问题。记录这一点的发行说明在这里:

https://developers.google.com/web-toolkit/release-notes#Release_Notes_2_5_1

他们指出:

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

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

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

以下是 DirectInstallLinker 的 Javadoc:

http://google-web-toolkit.googlecode.com/svn/javadoc/2.5/com/google/gwt/core/linker/DirectInstallLinker.html

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

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

(dil 可以替换为您选择的任何内容,只要没有破折号或其他非法字符)。

您需要选择 GWT 2.5.1 作为您的 GWT 版本。如果您在过时版本的 Eclipse 中使用旧版本的 GWT,例如 Ganymede(就像我一样),则必须至少升级到 Helios,然后将项目导入到新的 Eclipse 环境中。可用于最新三个 Eclipse 版本的 Google Plugin for Eclipse 的存档 URL 可以在此处找到:

https://developers.google.com/eclipse/docs/download

完成上述设置后,您应该能够设置

"manifest_version": 2

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐