【问题标题】:Will removing an iframe from the DOM always stop an upload POSTed from that iframe?从 DOM 中删除 iframe 是否总是会停止从该 iframe 发布的上传?
【发布时间】:2011-03-15 15:18:36
【问题描述】:

我正在使用 iframe 进行一些异步文件上传,我想知道简单地从 DOM 中修剪 iframe 是否足以取消上传。

This discussion 似乎暗示这是一个糟糕的解决问题的方法,但令人讨厌的是 JS 的“专家”拒绝透露他的解决方案。

无论如何,在 Gecko + WebKit 中删除 iframe 是可行的,但我想知道人们是否有其他 DOM 实现的经验。

【问题讨论】:

  • 仅供参考:BigResource 历来被各种恶意软件感染。我尽可能避免它。
  • 好的,谢谢。我将链接源更改为垃圾邮件较少的域,这实际上可能是线程的原始来源。
  • 谢谢。尽管 Norton Safe Web 目前报告它们是安全的,但几个月前,它们的所有结果旁边都有一个红色 X。幸运的是,即使我点击了您的链接,我也随身携带了 NoScript 保护。

标签: javascript dom iframe upload file-upload


【解决方案1】:

很可能不会。通常,JS 引擎与 DOM 主体异步工作。更改 DOM 不会停止正在进行的操作。

现在,如果 JS 引用了 DOM 的缺失部分,或者检查是否存在某些内容以便继续,这可能会起作用。

【讨论】:

    【解决方案2】:

    IMO,讨论中的那个家伙不知道他在说什么。许多人称自己为专家,但他们只是空壳的大炮。如果您想进行一些异步文件上传,可以使用 Flash。我通常不推荐 Flash,但 SWFUpload 小部件是 IMO 中最好的小部件之一。

    http://www.swfupload.org/

    除此之外,你可以看看这个,代码很丑,但作者似乎确认这是跨浏览器。

    http://www.webtoolkit.info/ajax-file-upload.html

    回答您的问题:不,删除 iframe 并不能保证下载会真正停止,或者下载过程已在服务器端有效地取消。这是因为从 DOM 中移除 iframe 并不能保证某处某处仍在使用它,因此不会被垃圾回收。

    您可以简单地设置一个不同的目标 url(例如:“about:blank”),而不是删除 iframe,这通常会切断与服务器的连接并最终停止任何正在进行的数据传输。之后您可以删除 iframe。

    但是,我建议您采用两步流程,即上传文件以及包含一些哈希值的隐藏字段。该文件存储在服务器上的临时目录中。上传完成后,您使用相同的哈希发出第二个请求,以验证文件上传完成并完成上传处理。这样可以确保如果下载中途取消,但文件已经上传到服务器,您根本不会完成该过程,稍后您可以让另一个进程清理临时上传的文件。

    第一个解决方案更简单,但需要 Flash :(

    【讨论】:

    • 谢谢,重置 iframe 成功了:iframe.src = "javascript:'<html></html>';";我更有信心,这是正确的做法。对我的设置进行 WRT,它仅与 JavaScript + Nginx 结合使用 Upload 和 UploadProgress 模块就可以很好地工作。
    猜你喜欢
    • 1970-01-01
    • 2014-10-25
    • 1970-01-01
    • 2015-09-10
    • 1970-01-01
    • 2011-01-04
    • 2015-07-05
    • 2010-09-09
    • 1970-01-01
    相关资源
    最近更新 更多