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



我们没有直接链接到网站上要下载的文件,而是链接到一个写着"谢谢下载"的页面。该页面上有跟踪代码,所以我们知道有多少人下载了该文件。页面使用所示的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;
}

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

以jQuery的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数量是有限制的。还要注意的是,我在cookie中使用了链接的id属性来识别它们——我认为这比使用某种形式的href属性更合适。我还在cookie名称前面加了site.

有几个解决方案。这里有一个例子:

function navigateToDownload(href){
    var e = document.createElement("iframe");
    e.src=href;
    e.style.display='none';
    document.body.appendChild(e);
}

其他实现可能存在,但我怀疑它们是否不那么"时髦"。

相关内容

  • 没有找到相关文章

最新更新