2011-04-03 53 views
1

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

回答

1

那么有一对夫妇来此解决方案。这里有一个例子:

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

其他的实现可能存在,但我怀疑他们不那么“黑客”。

+0

我不明白这将如何解决他的问题? – Christian 2011-04-03 23:35:40

+0

而不是替换浏览器的历史记录,它附加一个iframe,它将开始下载文件。因此按照后面的按钮功能按预期工作。 – Khez 2011-04-03 23:41:23

+0

我不确定它是否可以正常工作,因为后退按钮加载表单缓存 - 因此生成的HTML。 – Christian 2011-04-04 06:32:51

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属性。我还在前面加上了site.