我们不是直接链接到要在网站上下载的文件,而是链接到一个“感谢您下载”的页面。该页面上有跟踪代码,因此我们知道有多少人下载了该文件。该页面使用显示的jQuery代码启动下载文件,在下载开始之前页面加载后会增加一个短暂的延迟。下载位置有一个内容处理标题,因此它总是在浏览器中正确下载,可以看到“谢谢你下载”页面。这一切都运作良好。
如果用户继续浏览此页面然后返回,则会出现问题。下载再次发生。
使用window.location.replace(href);
似乎无法修复它。
由于提供页面的CMS已将其设置为立即过期,因此未进行缓存,因此问题进一步复杂化。
建议(i)避免这个问题的方法; (ii)处理文件下载/感谢页面的更好方法吗?
jQuery代码
$(document).ready(function () {
$('a.autoDownload').each(function () {
setTimeout('navigateToDownload("' + $(this).attr('href') + '")', 4000);
});
});
function navigateToDownload(href) {
document.location.href = href;
}
答案 0 :(得分:2)
一种可能的方法是在页面首次加载时通过Javascript设置cookie。然后,如果再次加载该页面,您可以检查是否存在cookie,如果存在,则不执行自动下载?
$(document).ready(function () {
$('a.autoDownload').each(function () {
var hasDownloadedThisLink = $.cookie("site." + $(this).attr('id'));
if (!hasDownloadedThisLink) {
$.cookie("site." + $(this).attr('id'), "true");
setTimeout('navigateToDownload("' + $(this).attr('href') + '")', 4000);
}
});
});
这只是一个例子。如果你这样做,你必须考虑可能有多少个下载链接,因为你可以设置多少个cookie的限制。另请注意,我使用链接的id
属性在cookie中标识它们 - 我认为这更适合使用某些形式的href
属性。我还将cookie名称加上site.
。
答案 1 :(得分:1)
对此有几种解决方案。这是一个例子:
function navigateToDownload(href){
var e = document.createElement("iframe");
e.src=href;
e.style.display='none';
document.body.appendChild(e);
}
可能存在其他实现,但我怀疑它们不那么“hacky”。