无法在Chrome应用中加载AWS开发工具包

tar*_*yte 2 javascript amazon-s3 amazon-web-services google-chrome-app

在Chrome应用程序中从Javascript写入S3存储桶时,我正在尝试这个例子,但似乎被权限阻止了.

我必须包含aws sdk的本地副本: <script src="assets/third-party/js/aws-sdk-2.0.22.min.js"></script>

否则我得到一个: <script src="https://sdk.amazonaws.com/js/aws-sdk-2.0.22.min.js"></script> Refused to load the script <script path> because it violates the following Content Security Policy

然后,AWS SDK库失败并显示: window.localStorage is not available in packaged apps. Use chrome.storage.local instead.

我运气不好吗?@Amazon,你能为Chrome应用制作一个SDK版本吗?

Lor*_*gal 5

我刚刚测试了将SDK嵌入到Google提供的hello-world示例应用程序中,我能够成功加载它并在我启用了CORS的Amazon S3存储桶中列出对象.

我确实得到了window.localStorage警告,但请注意这是一个警告,如果你正在使用它应该只影响你AWS.CognitoIdentityCredentials(并且可以解决,请参阅本文的结尾以获取更多信息).

我必须包含aws sdk的本地副本: <script src="assets/third-party/js/aws-sdk-2.0.22.min.js"></script>

没错,在编写Chrome应用时,您必须嵌入外部内容.这是由于Chrome的内容安全策略,它对可执行代码的来源有严格的规定.我建议您阅读Chrome App开发人员指南的" 处理外部内容 "部分,了解有关如何处理这些资源的更多信息,以及如何沙箱化无法嵌入的内容.

附录: window.localStorage

编辑:由于此更改,在v2.0.23之后将不再需要此变通方法.

如果您碰巧需要AWS.CognitoIdentityCredentials,可以window.localStorage通过在SDK之前添加脚本标记来解决此问题,如下所示:

<script type="text/javascript" src="localStorage.js"></script>
<script type="text/javascript" src="aws-sdk-2.0.23.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

localStorage.js文件只需重新定义localStorage并具有以下单行:

window.localStorage = {};
Run Code Online (Sandbox Code Playgroud)

请注意,在可能的情况下AWS.CognitoIdentityCredentials依赖于window.localStorage缓存您的Cognito身份ID.对于单页应用程序,缓存此ID的需求应该不那么重要,因此可以使用上述技术禁用.如果确实需要缓存,可以查看AWS.CognitoIdentityCredentials API文档以获取身份ID并将其存储以供日后使用.您可能还想查看编写一个沙盒应用程序window.localStorage,如果需要,它可以让您使用以及引用外部内容和更轻松的CSP.