优雅的自动下载解决方案

时间:2009-02-10 10:19:40

标签: javascript html pdf download meta-tags

我目前正在使用meta http-equiv ='Refresh'来自动启动PDF下载。但是这对每个浏览器都有不同的影响。

主要问题是IE(6& 7)一旦用户被重定向到PDF,如果用户单击后退按钮,他们将被发送回发起下载的页面,然后再次立即重定向到PDF。

Windows上的Firefox效果更好,但用户无法访问下载页面并重定向到PDF。但是,如果他们使用后退按钮,则会完全错过下载页面。

目前Linux上的Firefox具有我想要的确切效果。由于下载页面将您重定向到PDF并且PDF中的后退按钮会将您发送回下载页面并在那里停留。

我尝试使用javascript setTimeout()函数来延迟弹出PDF,但是延迟似乎在任何浏览器中都不起作用,并且弹出窗口似乎在IE7中不起作用。

有没有人对我可以使用的问题实施优雅的解决方案?

先谢谢你的帮助

4 个答案:

答案 0 :(得分:1)

引荐

您可以查看推荐人:

if (document.referrer != "http://homepage.com/file.pdf") {
    // go to the file
}

它有点复杂,因为你必须与引用者的绝对URL进行比较,但这应该不是问题。

缓存

您可以在第一次进入下载页面时设置Cookie。如果设置了cookie(对于cookie中的每个文件中的另一个条目),则不应重定向。

缺点是如果有人重新加载页面(因为他想第二次看到该文件),他就不能再访问该文件了。它周围有一些可能性:

  • 设置一个在cookie中过期的时间戳。
  • 添加指向用户可以手动点击的页面的链接。

设置/获取cookie:

if (document.cookie && document.cookie == "I was here!") {
    alert(document.cookie);
} else { // set a cookie
    document.cookie = "I was here!";
}

Javascript可以像这样重定向:

window.location.href = "http://www.google.com";

答案 1 :(得分:0)

使用javascript弹出窗口

这种方式当用户访问pdf时,它位于不同的浏览器中,您可以关闭它。一旦你这样做,你可以继续浏览网站。

答案 2 :(得分:0)

如果我理解你需要正确,你想做类似文件共享行为:用户等待几秒钟的计数器,超时后你将他重定向到开始下载的页面。

也许你应该只是显示链接来下载页面而不是重定向?此页面应发送标题“强制下载”以避免浏览器在其上导航。如果有人试图直接访问此页面 - 检查引用者或标题或您可以想象的任何其他保护(如动态链接),也许您已经有了。

此解决方案将允许您避免JS魔术,并且应该使您的代码跨浏览器没有麻烦。

答案 3 :(得分:0)

您可以通过javascript将iframe添加到DOM,并将src设置为您要下载的网址。浏览器根本不会更改页面,下载才会开始。它可以使用CSS隐藏,用户甚至不知道它在那里。