【问题标题】:javascript - opening hidden iframe for file download on document readyjavascript - 打开隐藏的 iframe 以在文档准备好时下载文件
【发布时间】:2013-04-22 10:28:07
【问题描述】:

我正在尝试使用此技巧在文档准备就绪时打开文件下载对话框。同样的技巧对我来说又一次奏效,但那次 iframe 是在 ajax 调用之后添加的。这是sn-p:

<script type="text/javascript">
  $(document).ready(function() {
     var url='/my_file_url/';
     var _iframe_dl = $('<iframe />')
                       .attr('src', url)
                       .hide()
                       .appendTo('body');
  });
</script>

虽然 iframe 在 html 代码中正确打印,但它没有预期的行为:加载页面后没有出现下载文件弹出窗口。有什么帮助吗?

【问题讨论】:

  • 你确定你的语法正确吗?
  • 没有结束 });
  • 您的文件网址的标题是否正确? (如果你用浏览器打开,有下载弹窗吗?
  • 你没有关闭你的$(document).ready(function(){
  • 如果你关闭你的函数和调用});jsfiddle.net/aMcNV

标签: javascript jquery iframe popup document-ready


【解决方案1】:

It works just fine,假设 MIME 属于将开始下载的类型,例如 application/octet-stream。由于内置 pdf 阅读器,您可能会遇到浏览器正在呈现它并且不提供下载的问题。

$(document).ready(function(){
var url='data:application/octet-stream,hello%20world';
var _iframe_dl = $('<iframe />')
       .attr('src', url)
       .hide()
       .appendTo('body');
});

如果客户端在现代浏览器上,另一种解决方案是使用带有 hrefdownload 集的&lt;a&gt;,然后模拟点击它。

var a = document.createElement('a'),
    ev = document.createEvent("MouseEvents");
a.href = url;
a.download = url.slice(url.lastIndexOf('/')+1);
ev.initMouseEvent("click", true, false, self, 0, 0, 0, 0, 0,
                  false, false, false, false, 0, null);
a.dispatchEvent(ev);

【讨论】:

  • 谢谢保罗,但我仍然不明白我的错误在哪里:jsfiddle.net/MjuQP
  • 那个小提琴没有添加jquery,也没有在正确的时间包含JavaScript(见左边的设置)。此外,问题似乎来自 .pdf 文件 ext
  • 现代浏览器(例如 Chrome)可以使用 a.click() 代替 ev 的东西。
  • @Redsandro element.click2003 或更早以来一直在 the spec,这与 现代 无关;在这段代码中调度事件的目的是尽可能地模拟鼠标点击,就好像它真的发生了一样。
  • @Paul S: 我在哪里说过 element.click 最近才出现在规范中?您只能在DOM 中的element 上执行element.click。您的示例在DOM 中没有a,因此您需要像Chrome 这样的现代浏览器在其上执行element.click,因为过去10 年它不会那样工作。
猜你喜欢
  • 1970-01-01
  • 2015-07-12
  • 2017-02-15
  • 1970-01-01
  • 2015-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多