【问题标题】:A way to determine file is loaded in iframe一种确定文件是否加载到 iframe 中的方法
【发布时间】:2017-05-11 22:00:09
【问题描述】:

我遇到了一个问题:我想在“保存文件”对话框关闭或我在服务器上生成的 csv 文件被加载(隐藏用于加载的微调器)时捕捉片刻。我知道 Javascript 中没有这样的事件。我绝对不想在后端为这样一个小问题添加 cookie,所以我想实施另一种解决方法。我看到的唯一出路是 iframe,但据我所知,onload 之类的事件侦听器至少在 Chrome 中的附件标头的情况下不起作用。我还尝试实现一种检查 iframe 状态的计时器,但它在发送文件请求后立即工作。文件会在几秒钟内 (10-20) 在服务器上生成,因此此解决方案不符合我的目标。

我在前端使用 Angular,因此任何兼容的解决方案(vanilla JS、jQuery、Angular 本身)都会对我有很大帮助。希望得到任何。谢谢各位!

【问题讨论】:

  • @guest271314 实际上,不,不是。我看到了你显示的答案,但它对我没有帮助。
  • “我看到了你给出的答案,但对我没有帮助” 你什么意思?第一个链接检查用户保存的文件;第二个链接将在 N 秒或分钟后提供实际的时刻文件已完成下载到浏览器。 “我想在“保存文件”对话框关闭或我在服务器上生成的 csv 文件已加载(以隐藏用于加载的微调器)时捕捉片刻。” 第二个链接应回答当前问题。第一个或第二个链接不满足的要求是什么?
  • @guest271314 我还没有看到第二个答案,抱歉,但第一个对我没有帮助。例如,深入挖掘第一个链接上的第一个答案需要服务器上的 cookie。其他人也不适合(我在问题中列出了要点),但我认为在第一个链接上列出所有答案并不是一个好主意。顺便说一句,感谢第二个链接,我会检查它的答案!
  • 注意,第一个链接的方法不需要cookie。第二个链接应满足问题中描述的要求。您可以结合这两种解决方案来确定文件何时完成加载以及用户何时下载或不下载文件到用户文件系统。

标签: javascript iframe download dom-events jquery-events


【解决方案1】:

这里没有DOM 事件,这是在Save file UI 对话框打开或关闭时触发的。

您可以尝试使用focus 事件来捕获Save file 对话框关闭并且window 在对具有<a> 属性集的.click() 调用.click() 后重新获得焦点的时间,尽管该方法并不完全可靠。

// append or display spinner element here
var csvUrl = document.createElement("a"); 
csvUrl.href = url; 
csvUrl.download = "csv_filename"; 
csvUrl.click();
window.onfocus = function () { 
  document.body.removeChild(csvUrl); 
  // remove or hide spinner element here 
  window.onfocus = null; 
}

【讨论】:

  • 比你,这就像我想要的那样工作。还要额外感谢您与我一起解决这个问题!
猜你喜欢
  • 2014-11-02
  • 1970-01-01
  • 2011-03-05
  • 2018-01-18
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多