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

6
以下JavaScript代码有两个步骤。 第一步:转到.pdf,.doc,.exe或其他非html本地的内容。如果location.href接管了浏览器窗口,则无需执行第二步。(PDF通常接管浏览器窗口)。大多数其他事物会启动下载管理器进程。例如.exe。但是,有些东西,如Word文档,根据浏览器设置可以是下载或直接显示在浏览器窗口中。我希望它能做hef.location的事情。 第二步:但如果正在下载诸如.exe之类的文件,则在该过程完成后返回主页。
或者在步骤1和步骤2之间等待5秒钟的解决方案似乎大多数情况下都有效。但在较慢的连接上,它并不总是有效。然后,它会在完成第一个href.location调用之前转到主页,他们永远看不到PDF,只会看到主页。
FYI...我将它们包裹在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>

除非您使用ajax来发送请求,否则仅使用javascript无法完成此操作。阅读此内容可能会有所帮助:https://dev59.com/KXI_5IYBdhLWcg3wF_J3 - Andrew
3个回答

2
我不认为在JavaScript中实现你所要求的功能是可能的。当你将某些内容设置为window.location时,基本上是告诉浏览器在当前窗口加载指定的URL。当浏览器这样做时,之前页面上的所有代码都停止运行。
以下是我能想到的几种可能性:
- 在弹出窗口或新窗口中加载外部文件。我没有尝试过,所以我不确定它在所有浏览器中是否有效。 - 使用您正在使用的任何服务器端语言来提供文件。然后,您将有能力在文件提供后重定向客户端。

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,使用类似的技术。


0

就我所知,您有两个选择

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

使用纯JavaScript不可能实现这一点,通过服务器端脚本隧道传输下载也无法处理重定向。很遗憾,您必须选择一个折中的解决方案


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接