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

Jef*_*Jak 6 javascript location

下面的 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-无破坏历史记录

我的问题: 有没有办法知道 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>
Run Code Online (Sandbox Code Playgroud)

Chr*_*isR 0

据我所知,你有两个选择

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

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