javascript - 无法在 Chrome 应用程序中加载 AWS SDK

标签 javascript amazon-web-services amazon-s3 google-chrome-app

我正在探索 this example在 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 版本吗?

最佳答案

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

我确实得到了window.localStorage警告,但请注意,这是一个警告,并且仅当您使用 AWS.CognitoIdentityCredentials 时才会影响您(并且可以解决,请参阅本文末尾了解更多信息)。

I must include a local copy of the aws sdk: <script src="assets/third-party/js/aws-sdk-2.0.22.min.js"></script>

没错,在编写 Chrome 应用时必须嵌入外部内容。这是由于 Chrome 的 Content Security Policy ,它对可执行代码的来源有严格的规则。我建议您阅读 Chrome 应用开发者指南的“Handling External Content”部分,以详细了解如何处理此类资源,以及如何对无法嵌入的内容进行沙箱处理。

附录:window.localStorage

编辑:由于 this change,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>

localStorage.js文件将简单地重新定义 localStorage并有以下单行:

window.localStorage = {};

请注意AWS.CognitoIdentityCredentials依赖 window.localStorage尽可能缓存您的 Cognito 身份 ID。对于单页应用程序来说,缓存此 ID 的需求应该不太重要,因此可以禁用上述技术。如果确实需要缓存,可以看到 AWS.CognitoIdentityCredentials用于获取身份 ID 并存储以供日后使用的 API 文档。您可能还想看看写一个 sandboxed app ,这将允许您利用 window.localStorage以及引用外部内容和更宽松的 CSP(如果需要)。

关于javascript - 无法在 Chrome 应用程序中加载 AWS SDK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26741990/

相关文章:

google-app-engine - 云上有大牌吗?

javascript - 对表执行计数

javascript - 提交后如何清除表单

javascript - 检测覆盖 iframe 的系统窗口

ios - 无法使用 AWS sdk 1.2.0 构建 ios 应用程序

amazon-web-services - 从ALB切换到NLB后健康检查失败?

javascript - 重用我自己的 JavaScript 模块而不使用相对路径

javascript - 在 html 页面中显示来自 s3(亚马逊)的图像

amazon-web-services - 从存储桶策略中排除一个 Amazon S3 对象

php - 无法从 PHP 中的大文件的 Img2Json API 获取 JSON 数据