6

下面的 JavaScript 代码有两个步骤。

第 1 步:转到 .pdf、.doc、.exe 或非 html 原生文件。如果 location.href 已经接管了浏览器窗口,则无需执行第 2 步。(PDF 通常接管浏览器窗口)。大多数其他事情都会启动下载管理器进程。比如.exe。但是有一些东西,例如 word 文档,可以下载或直接显示在浏览器窗口中,具体取决于浏览器设置。我希望它做 hef.location 会做的事情。

第2步:但是如果在该过程完成后它正在下载诸如.exe之类的文件,则转到主页。

或者在第 1 步和第 2 步之间仅等待 5 秒的解决方案似乎大部分时间都有效。但在较慢的连接上,它并不总是有效。然后它在没有完成第一个 href.location 调用的情况下进入主页,他们永远不会看到 PDF,只看到主页。

仅供参考...我将它们包装在 setTimeOut 中的原因与这个 firefox 问题有关。 堆栈溢出:864633 分配到文档位置-href-without-clobbering-history

我的问题: 有没有办法判断 location.href 进程何时完成?

<script language="JavaScript"><!--
function windowOnLoad() {
    setTimeout(function(){
       location.href='/someurl/something.pdf';  //sometimes this is .doc file
    },0);
    setTimeout(function(){
       location.href='/homepage';
    },5000);
    return false;
}
//-->
</script>
4

3 回答 3

2

我不相信有可能在 JavaScript 中做你所要求的事情。当您将某些内容设置为 window.location 时,您基本上是在告诉浏览器在当前窗口中加载指定的 url。当浏览器这样做时,前一页上的所有代码都停止运行。

以下是我想到的几种可能性:

  • 在弹出窗口或新窗口中加载外部文件。我还没有尝试过,所以我不确定它在所有浏览器中如何工作。
  • 使用您使用的任何服务器端语言来提供文件。然后,您将能够在提供文件后重定向客户端。
于 2009-11-17T21:32:33.937 回答
1

正如其他人所说,Javascript 没有可用的“onDownloadComplete”事件。但是,如果您愿意在下载过程中显示不同内容,则可以使用以下技术:

  1. 在页面 A 上,有一个指向页面 B 的链接
  2. 在页面 B 上,显示您希望在文件下载时向用户展示的内容
  3. 在页面 B 的元素内,添加一个实际开始下载的 META 标签,即

    <head>
        <meta http-equiv="refresh" content="1;url=http://server.com/document.doc" />
    </head>
    

最终结果是浏览器将继续显示 (2) 中的内容,但还会通过“另存为...”对话框提示用户保存下载。

许多下载站点,如 CNet 和 Sourceforge,都使用类似的技术。

于 2009-11-18T08:26:55.310 回答
0

据我所知,你有两个选择

  • 链接到弹出窗口中的文件(如果浏览器找到的唯一内容是可下载文件,则通常应自行关闭此文件)并同时重定向到目标页面
  • 构建一些链接到目标页面并在那里启动下载的动态功能,但这在您的情况下可能没有用

纯 javascript 这是不可能的,并且通过服务器端脚本隧道下载也无法处理重定向。恐怕你必须在两者之间找到一个解决方案

于 2009-11-19T07:28:07.627 回答