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版本吗?
我刚刚测试了将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.
| 归档时间: |
|
| 查看次数: |
496 次 |
| 最近记录: |