我在这里指定了一个非常类似的需求。
我需要有用户的浏览器手动启动下载时$('a#someID').click();
但是我不能用窗户。Href方法,因为它将当前页面内容替换为您试图下载的文件。
相反,我想在新窗口/标签中打开下载。这怎么可能呢?
我在这里指定了一个非常类似的需求。
我需要有用户的浏览器手动启动下载时$('a#someID').click();
但是我不能用窗户。Href方法,因为它将当前页面内容替换为您试图下载的文件。
相反,我想在新窗口/标签中打开下载。这怎么可能呢?
当前回答
我建议使用下载属性而不是jQuery:
<a href="your_link" download> file_name </a>
这将下载您的文件,而不需要打开它。
其他回答
如果您已经在使用jQuery,可以利用它生成一个较小的代码片段 jQuery版本的Andrew的回答:
var $idown; // Keep it outside of the function, so it's initialized once.
downloadURL : function(url) {
if ($idown) {
$idown.attr('src',url);
} else {
$idown = $('<iframe>', { id:'idown', src:url }).hide().appendTo('body');
}
},
//... How to use it:
downloadURL('http://whatever.com/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”方式解决方案(我没有在其他浏览器上测试过,所以请留下关于可编译性的评论)
这些函数在stacktrace.js中使用:
/**
* Try XHR methods in order and store XHR factory.
*
* @return <Function> XHR function or equivalent
*/
var createXMLHTTPObject = function() {
var xmlhttp, XMLHttpFactories = [
function() {
return new XMLHttpRequest();
}, function() {
return new ActiveXObject('Msxml2.XMLHTTP');
}, function() {
return new ActiveXObject('Msxml3.XMLHTTP');
}, function() {
return new ActiveXObject('Microsoft.XMLHTTP');
}
];
for (var i = 0; i < XMLHttpFactories.length; i++) {
try {
xmlhttp = XMLHttpFactories[i]();
// Use memoization to cache the factory
createXMLHTTPObject = XMLHttpFactories[i];
return xmlhttp;
} catch (e) {
}
}
}
/**
* @return the text from a given URL
*/
function ajax(url) {
var req = createXMLHTTPObject();
if (req) {
try {
req.open('GET', url, false);
req.send(null);
return req.responseText;
} catch (e) {
}
}
return '';
}
您可以简单地使用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没有提供给你。
我建议使用下载属性而不是jQuery:
<a href="your_link" download> file_name </a>
这将下载您的文件,而不需要打开它。