强制使用 jquery 下载所有 <a> 标签上的文件
Forcing to download files on all <a> tags using jquery
我正在对数字内容实施结帐流程。当用户下订单时,我会向他展示他购买的所有产品以及产品旁边的每个产品的下载链接。我的客户希望在加载成功页面时,所有产品都应自动下载。
以下是代码片段:
包含产品下载链接的页面的 HTML 代码段
<p>Some digital product name</p>
<a class='digital-download' href="<?php echo Yii::app()->request->getBaseUrl('true'); ?>/site/downloadfile/filename/<?php echo $digital_download['filename']; ?>">Click here download</a>
我的 PHP 代码用于启动文件下载的操作(下载文件操作(:
public function actionDownloadFile($filename) {
$file = Yii::app()->request->getBaseUrl(true) . '/upload/digitaluploads/' . $filename; //file location
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . basename($file) . '"');
readfile($file);
}
现在,由于我的客户端希望在加载页面时自动下载所有文件,因此我尝试使用jQuery执行以下操作:
$(document).ready(function() {
$('.digital-download').each(function() {
var download_link = $(this).attr("href");
window.location = download_link;
});
});
问题:
它仅启动第一个文件的下载,不启动其他文件的下载。此外,以下jQuery事件根本不起作用:
$(document).ready(function() {
$('.digital-download').each(function() {
$(this).click();
});
});
有什么解决办法吗?
你不能使用单个窗口(window.location
(来做到这一点 - 因为浏览器限制每个窗口一个页面加载。下载在页面加载时启动 - 当内容类型不可接受或打算下载时。
在我看来,最好的解决方法是使用iframes
$('a.digital-download').each(function(){
$('<iframe></iframe>', {src: $(this).attr('href')})
.css({
width:0,
height:0,
border:'none'
})
.appendTo('body');
});
下载链接是从锚元素收集的,并添加到新创建的iframe
元素中。 Iframes
本质上是嵌入式窗口。稍后,当iframes
追加到页面时 - 启动多个页面加载并启动多个下载。
编辑:最近不得不使这个解决方案与纯JavaScript一起工作
var body = document.getElementsByTagName('body'),
elements = document.getElementsByClassName('digital-download'),
element, src;
for(var I in elements)
{
if(elements.hasOwnProperty(I) && elements[I].attributes.length > 0)
{
src = null;
for(var O in elements[I].attributes)
{
if(elements[I].attributes.hasOwnProperty(O) && elements[I].attributes[O].name == 'href')
{
src = elements[I].attributes[O].value;
}
}
if(typeof src != 'undefined' && null !== src)
{
element = document.createElement('iframe');
element.style.width = 0;
element.style.height = 0;
element.style.borderWidth = 0;
body[0].appendChild(element);
element.src = src;
}
}
}
相关文章:
- 在一个javascript文件中为整个网站创建标签
- 当选择文件时更改标签内容jQuery
- 在javascript文件中编写html标签而不是“text”
- 如何使用
- 如何在javascript函数中弹出php(与html标签混合)文件
- Angular 2-我如何使我的index.html文件的标题和关键字和描述的元标签是动态的
- 允许用户键入html标签并将其保存到文件中以在网站上显示
- 如何更改CSS文件或隐藏<link>标签
- 将文件转换为数组并使用数据列表和选项标签为自动完成文本框添加数组元素
- 如何缓存整个视频文件以供以后通过视频标签离线播放
- 在正文标签中嵌入 Javascript 文件
- 更改火狐输入文件标签中的光标样式
- 输入类型文件未正确将图像放入图像标签
- 如何使用 jQuery 将 span 标签添加到所选文本并将更改永久保存在本地 html 文件中
- 如何从IE浏览器中的输入文件标签中获取javascript中的文件名
- 如何在 javascript 中调用输入文件标签 在 safari 浏览器中
- 从输入文件类型获取名称并通过 javascript 显示在 p 标签中
- 如何在 JavaScript 中获取文件路径表单输入标签
- 将WordPress标签存储在JS文件中的变量中
- 输入标签文件值jquery