自动下载行为和后退按钮问题

时间:2011-04-03 22:48:09

标签: javascript html download

我们不是直接链接到要在网站上下载的文件,而是链接到一个“感谢您下载”的页面。该页面上有跟踪代码,因此我们知道有多少人下载了该文件。该页面使用显示的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;
}

2 个答案:

答案 0 :(得分:2)

一种可能的方法是在页面首次加载时通过Javascript设置cookie。然后,如果再次加载该页面,您可以检查是否存在cookie,如果存在,则不执行自动下载?

Cookie plugin for jQuery为例:

$(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”。​​