我在这里指定了一个非常类似的需求。
我需要有用户的浏览器手动启动下载时$('a#someID').click();
但是我不能用窗户。Href方法,因为它将当前页面内容替换为您试图下载的文件。
相反,我想在新窗口/标签中打开下载。这怎么可能呢?
我在这里指定了一个非常类似的需求。
我需要有用户的浏览器手动启动下载时$('a#someID').click();
但是我不能用窗户。Href方法,因为它将当前页面内容替换为您试图下载的文件。
相反,我想在新窗口/标签中打开下载。这怎么可能呢?
当前回答
我知道我迟到了,但我想分享我的解决方案,这是上面Imagine Breaker解决方案的变化。我试着用他的方法,因为他的方法对我来说是最简单易行的。但就像其他人说的那样,它不适合某些浏览器,所以我使用jquery对它进行了一些修改。
希望这能帮助到那里的人。
function download(url) {
var link = document.createElement("a");
$(link).click(function(e) {
e.preventDefault();
window.location.href = url;
});
$(link).click();
}
其他回答
只传递文件的链接。它将下载带有原始名称的文件。
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();
}
使用一个不可见的<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'});
无论何时单击该链接,它都会在一个新的选项卡/窗口中下载文件。
hitesh在2013年12月30日提交的答案实际上是有效的。只是需要一点点调整:
PHP文件可以调用自己。换句话说,只需创建一个名为saveass .php的文件,并将此代码放入其中…
<a href="saveAs.php?file_source=YourDataFile.pdf">Download pdf here</a>
<?php
if (isset($_GET['file_source'])) {
$fullPath = $_GET['file_source'];
if($fullPath) {
$fsize = filesize($fullPath);
$path_parts = pathinfo($fullPath);
$ext = strtolower($path_parts["extension"]);
switch ($ext) {
case "pdf":
header("Content-Disposition: attachment; filename=\"".$path_parts["basename"]."\""); // use 'attachment' to force a download
header("Content-type: application/pdf"); // add here more headers for diff. extensions
break;
default;
header("Content-type: application/octet-stream");
header("Content-Disposition: filename=\"".$path_parts["basename"]."\"");
}
if($fsize) {//checking if file size exist
header("Content-length: $fsize");
}
readfile($fullPath);
exit;
}
}
?>
仅仅7年之后,这里出现了一行jQuery解决方案,使用表单而不是iframe或链接:
$('<form></form>')
.attr('action', filePath)
.appendTo('body').submit().remove();
我已经测试过了
Chrome 55 Firefox 50 边缘IE8-10 iOS 10 (Safari/Chrome) Android浏览器
如果有人知道这个解决方案的任何缺点,我很乐意听听。
完整的演示:
<html>
<head><script src="https://code.jquery.com/jquery-1.11.3.js"></script></head>
<body>
<script>
var filePath = window.prompt("Enter a file URL","http://jqueryui.com/resources/download/jquery-ui-1.12.1.zip");
$('<form></form>').attr('action', filePath).appendTo('body').submit().remove();
</script>
</body>
</html>
您可以简单地使用HTML中的Download属性。使用优秀的Javascript,你可以使用这个功能直接下载文件。锚标记的download属性应该指向要下载的文件所在的链接。
首先,将URL指向资源路径:
var url = 'your url goes here';
创建一个锚标记,需要的属性如下所示:
var elem = document.createElement('a');
elem.href = url;
elem.download = url;
elem.id="downloadAnchor";
将锚标记附加到网页的body元素。
document.body.appendChild(elem);
现在以编程方式触发单击事件。点击锚标记将触发下载。
$('#downloadAnchor').click();
把它们放在一起:
var url = 'your url goes here';
var elem = document.createElement('a');
elem.href = url;
elem.download = url;
elem.id="downloadAnchor";
document.body.appendChild(elem);
$('#downloadAnchor').click();
附加信息:上面的代码没有什么奇特的,只是从Chrome Devtools的控制台工作的客户端JavaScript,但功能强大,也开辟了许多可能性,如网页爬行。
例如,下面这段在Devtools控制台中执行的代码将在一个新的选项卡中打开页面中的所有链接:只要进入这个网页,打开Devtools并在浏览器控制台中运行这个脚本,就可以看到JavaScript的强大威力了。(注意:下面的代码仅用于教学目的。)
确保你为该网站启用了弹出窗口,否则你的锚点点击将被默认的弹出窗口拦截器禁用。
var links = document.getElementsByClassName("_3ATBKe");
for(var i=0;i<links.length;i++){
var title = document.getElementsByClassName("_3ATBKe")[i].firstElementChild.firstElementChild.innerText.replaceAll('|','-').replaceAll(':','x');
console.log('Opening..'+title);
links[i].firstElementChild.click();
}
注意:这不仅仅局限于点击锚,你可以下载几乎任何你在你的网页上找到的东西。如果某些东西(图像、音频、视频)加载到你的网页上,你可以编写一个脚本来下载它,即使UI没有提供给你。