Javascript 无法在Chrome应用程序中加载AWS SDK
我在一个chrome应用程序中用Javascript向S3 bucket写入代码,但似乎被权限阻止了 我必须包括aws sdk的本地副本:Javascript 无法在Chrome应用程序中加载AWS SDK,javascript,amazon-web-services,amazon-s3,google-chrome-app,Javascript,Amazon Web Services,Amazon S3,Google Chrome App,我在一个chrome应用程序中用Javascript向S3 bucket写入代码,但似乎被权限阻止了 我必须包括aws sdk的本地副本: 否则我会得到一个: 拒绝加载脚本,因为它违反了以下内容安全策略 AWS SDK库随后出现以下故障: window.localStorage在打包的应用程序中不可用。改用chrome.storage.local。 我运气不好吗@Amazon,你能为chrome应用程序制作一个SDK版本吗?我刚刚测试了将SDK嵌入到Google提供的示例应用程序中,我成功地
否则我会得到一个:
拒绝加载脚本,因为它违反了以下内容安全策略
AWS SDK库随后出现以下故障:
window.localStorage在打包的应用程序中不可用。改用chrome.storage.local。
我运气不好吗@Amazon,你能为chrome应用程序制作一个SDK版本吗?我刚刚测试了将SDK嵌入到Google提供的示例应用程序中,我成功地加载了它,并在启用CORS的情况下在我自己的Amazon S3 bucket中列出了对象 我确实收到了
窗口.localStorage
警告,但请注意,这是一个警告,只有在您使用AWS.CognitoIdentityCredentials
时才会对您产生影响(可以解决此问题,有关更多信息,请参阅本文末尾)
我必须包含aws sdk的本地副本:
没错,编写Chrome应用程序时必须嵌入外部内容。这是因为Chrome对可执行代码的来源有严格的规定。我建议您阅读《Chrome应用程序开发人员指南》的“”部分,了解更多关于如何处理此类资源的信息,以及如何对无法嵌入的内容进行沙箱处理
附录:window.localStorage
编辑:由于以下原因,v2.0.23之后不再需要此解决方案
如果您碰巧需要AWS.CognitoIdentityCredentials
,您可以通过在SDK之前添加脚本标记来解决窗口.localStorage
问题,如下所示:
<script type="text/javascript" src="localStorage.js"></script>
<script type="text/javascript" src="aws-sdk-2.0.23.min.js"></script>
请注意,
AWS.CognitoIdentityCredentials
在可能的情况下依赖于window.localStorage
来缓存您的Cognito标识ID。对于单页应用程序,缓存此ID的需要应该不那么重要,因此可以使用上述技术禁用。如果您确实需要缓存,您可以查看API文档以获取标识ID并将其存储以备将来使用。您可能还想考虑编写一个,它允许您使用窗口。localStorage
,以及引用外部内容和更宽松的CSP(如果需要)。将localStorage设置为空对象没有任何作用-窗口。localStorage
对我来说始终保持null
。
window.localStorage = {};