【问题标题】:trigger an automatic download from javascript doesn't work on page load从 javascript 触发自动下载在页面加载时不起作用
【发布时间】:2014-03-02 16:59:58
【问题描述】:

我已使用链接的下载属性来下载文件。但是,当我从另一种方法触发点击事件时,它不会下载文件。为什么呢?我已经检查过点击事件正在被触发。这是我对 jsfiddle 的测试 - http://jsfiddle.net/6Fkb5/1/

<a href="#" download="https://www.dropbox.com/s/shd31hvnsn0fd0v/Getting%20Started.pdf" id="testdownload">Test Download</a>

var count=0;
$('#testdownload').on('click', function(){
    count++;
    $('#log').append('<li>Click triggered ' + count + ' times</li>');
});


$('#testdownload').trigger('click');

【问题讨论】:

  • @rakhi4110 是你运行它的时候还是点击链接的时候?
  • 我认为您滥用了download 属性。它是为href 属性中指定的下载链接指定不同的文件名。它不会解决你的问题,但也许你还是应该解决它。

标签: javascript jquery


【解决方案1】:

试试这个:

$('#testdownload').get(0).click();

编辑:只是为了澄清这将触发本机点击事件而不是 jQuery。

【讨论】:

  • 并非如此。它只是不希望您在小提琴框架中打开 PDF。检查这个:jsfiddle.net/6Fkb5/10
  • 抱歉没有在 IE 中尝试,但在 Chrome 中运行良好,所以不知道为什么它被否决了。
  • get(0) 返回 dom 元素,如果你执行 document.getElementById('testdownload') 会得到。 jQuery 选择器使用自己的方法将此 dom 元素包装在自己的对象中。
【解决方案2】:

不会工作....

即使你延迟它并等待 DOM 准备好:

var count=0;

$(function(){
  $('#testdownload').click(function(){
     count++;
     $('#log').append('<li>Click triggered ' + count + ' times</li>');  
  });

setTimeout(function(){ $('#testdownload').trigger('click'); },3000);

});

原因是安全协议...浏览器不允许脚本仅通过用户点击触发下载请求。

编辑:

实际上,CHROME 会支持$('#testdownload').get(0).click();,但 IE 会阻止你的脚本。

触发下载的正确方法是使用iframe

<iframe width="1px" height="1px" frameborder="0" src="{File location}"></iframe>

【讨论】:

  • 其他页面如何工作,几秒钟后开始下载?为什么鲁本的答案有效?显然这个答案是错误的。
  • 服务器端处理它,强制下载响应。
  • IE 在小提琴中阻止它,因为它试图在框架中打开它。此外,它会尝试打开 PDF 而不是下载它。但是,如果您添加target="_blank",它确实有效。没有安全问题,只是 IE 有点古怪并试图打开文件。 jsfiddle.net/6Fkb5/10
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-05
  • 1970-01-01
  • 1970-01-01
  • 2014-08-08
  • 2011-09-14
相关资源
最近更新 更多