2

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

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

Windows 上的 Firefox 效果更好,但仍不完美,用户进入下载页面并被重定向到 PDF。但是,如果他们使用后退按钮,则会完全错过下载页面。

目前 Linux 上的 Firefox 具有我想要的确切效果。因为下载页面会将您重定向到 PDF,而 PDF 中的后退按钮会将您发送回下载页面,然后您就可以停留在那里。

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

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

提前感谢您的帮助

4

4 回答 4

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";
于 2009-02-10T10:59:09.693 回答
0

使用 javascript 弹出窗口

这样,当用户访问 pdf 时,它位于不同的浏览器中,您可以将其关闭。完成此操作后,您可以继续浏览该站点。

于 2009-02-13T13:09:55.420 回答
0

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

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

这个解决方案可以让你避免 JS 魔法,并且应该让你的代码跨浏览器没有麻烦。

于 2009-02-13T14:13:44.223 回答
0

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

于 2009-07-09T18:32:47.217 回答