我如何等待location.href在JavaScript中完成?

时间:2009-11-17 15:29:38

标签: javascript location

以下JavaScript代码有两个步骤。

第1步:转到.pdf,.doc,.exe或者不是html原生的东西。如果location.href接管了浏览器窗口,则无需执行步骤2.(PDF通常会占用浏览器窗口)。大多数其他事情都会启动下载管理器流程。如.exe。但是根据浏览器的设置,有些文字可以在浏览器窗口中下载或显示。我希望它能做到hef.location会做的事情。

第2步:但是如果在完成该过程后正在下载.exe等文件,请转到主页。

或者在步骤1和2之间等待5秒的解决方案似乎在大多数情况下都能正常工作。但是在较慢的连接上,它并不总是有效。然后它进入主页而没有完成第一个href.location调用,他们从未看到PDF并只看到主页。

仅供参考...我在setTimeOut中包装它们的原因与此firefox问题有关。 Stack Overflow: 864633 assigning-to-document-location-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>

3 个答案:

答案 0 :(得分:2)

我认为不可能在JavaScript中执行您所要求的操作。当你将某些东西设置为window.location时,你基本上是告诉浏览器在当前窗口中加载指定的url。当浏览器执行该操作时,上一页上的所有代码都将停止运行。

以下是我头脑中的几种可能性:

  • 在弹出窗口或新窗口中加载外部文件。我没有尝试过,所以我不确定它在所有浏览器中是如何工作的。
  • 使用您用于提供文件的任何服务器端语言。然后,您可以在文件提供后重定向客户端。

答案 1 :(得分:1)

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

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

    <head>
        <meta http-equiv="refresh" content="1;url=http://server.com/document.doc" />
    </head>
    
  5. 最终结果是浏览器将继续显示(2)中的内容,但也会提示用户通过“另存为...”对话框保存下载。

    CNet和Sourceforge等许多下载网站都采用了类似的技术。

答案 2 :(得分:0)

据我所知,你有两个选择

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

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