我正在编写一个应用程序,我希望客户能够直接从浏览器上传到 Amazon S3。我可以很好地完成这项工作。但是当错误发生时,我想更优雅地处理它们,而不是在客户的屏幕上飞溅 XML 文档。
我有一个我认为可行的计划,但它失败了。这是我正在尝试的:
- 创建一个表单来进行上传,并将表单存储在 S3 本身上,与表单的“action”属性在同一个域中。
- 将客户重定向到此表单。现在他们的浏览器位于https://<bucket>.s3.amazonaws.com/something上。
- 该页面包含一个隐藏的 iframe。表单将其目标设置为 iframe。
- load 事件处理程序查看 iframe 的内容,并对其进行操作。
所以,像这样:
<iframe id="foo" name="foo" style="display: none" />
<form target="foo" action="https://<bucket>.s3.amazonaws.com/">
<input type="hidden" name="..." value="..." />
<input type="file" name="file" />
</form>
使用这个javascript(使用jquery):
function handler() {
var message = $("#foo").contents().find('message').text();
alert(message);
}
$("#foo").load(handler);
使用 firebug,我可以看到 iframe 包含一个 XML 文档,其中包含一个“消息”节点。但是,.find('message')
总是无法在 XML 文档中找到任何内容。
请注意,表单的操作与文档本身具有相同的域、端口和方案。所以,我认为我不应该违反同源政策。对?但是每次都失败。这是使用 Firefox 和 Google Chrome 浏览器。
感谢您的任何建议!