我在这里指定了一个非常类似的需求。
我需要有用户的浏览器手动启动下载时$('a#someID').click();
但是我不能用窗户。Href方法,因为它将当前页面内容替换为您试图下载的文件。
相反,我想在新窗口/标签中打开下载。这怎么可能呢?
我在这里指定了一个非常类似的需求。
我需要有用户的浏览器手动启动下载时$('a#someID').click();
但是我不能用窗户。Href方法,因为它将当前页面内容替换为您试图下载的文件。
相反,我想在新窗口/标签中打开下载。这怎么可能呢?
当前回答
使用一个不可见的<iframe>:
<iframe id="my_iframe" style="display:none;"></iframe>
<script>
function Download(url) {
document.getElementById('my_iframe').src = url;
};
</script>
为了迫使浏览器下载它本来能够呈现的文件(例如HTML或文本文件),您需要服务器将文件的MIME Type设置为一个无意义的值,例如application/x-please-download-me或application/octet-stream,这用于任意二进制数据。
如果您只想在一个新选项卡中打开它,唯一的方法是让用户单击目标属性设置为_blank的链接。
jQuery:
$('a#someID').attr({target: '_blank',
href : 'http://localhost/directory/file.pdf'});
无论何时单击该链接,它都会在一个新的选项卡/窗口中下载文件。
其他回答
Firefox和Chrome测试:
var link = document.createElement('a');
link.download = 'fileName.ext'
link.href = 'http://down.serv/file.ext';
// Because firefox not executing the .click() well
// We need to create mouse event initialization.
var clickEvent = document.createEvent("MouseEvent");
clickEvent.initEvent("click", true, true);
link.dispatchEvent(clickEvent);
这实际上是firefox的“chrome”方式解决方案(我没有在其他浏览器上测试过,所以请留下关于可编译性的评论)
只传递文件的链接。它将下载带有原始名称的文件。
function downloadFileWithLink(href) {
var link = document.createElement("a");
let name = (href?.split("/") || [])
name = name[name?.length-1]
link.setAttribute('download', name);
link.href = href;
document.body.appendChild(link);
link.click();
link.remove();
}
如果您不需要浏览另一个页面,这可能会很有帮助。 这是一个基本的javascript函数,所以可以用在任何平台的后端是javascript
window.location.assign('any url or file path')
来自Corbacho的优秀解决方案,我只是适应了摆脱var
function downloadURL(url) {
if( $('#idown').length ){
$('#idown').attr('src',url);
}else{
$('<iframe>', { id:'idown', src:url }).hide().appendTo('body');
}
}
适用于Chrome, Firefox和IE8及以上。
var link=document.createElement('a');
document.body.appendChild(link);
link.href=url ;
link.click();