js document.location.href执行完url之后才之后后续的功能

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js document.location.href执行完url之后才之后后续的功能相关的知识,希望对你有一定的参考价值。

怎让document.location.href中的方法执行完之后才继续执行后面的方法呢?
我现在做的是一个导出excel,在点击导出的时候显示一个遮罩层,执行完之后隐藏。。

document.location.href

它的作用 是将当前页面进行跳转 既然进行跳转了 那么就是马上加载新页面 后面的代码自然不能执行了 完全没办法执行后续代码。

但根据阁下所言 显然是想进入新页面然后下载一个excel文件 那么我可以提供以下几种思路方法供你选择:

    用COOKIE,在执行页面跳转前 设置COOKIE 在跳转到新页面后 在新页面执行COOKIE检测 检测到后就执行你要的遮罩层代码 然后进行下载 当然执行完后还要把COOKIE销毁 避免重复

    打开新页面 用JS打开一个新页面 这样就不会影响到当前页面后面的代码

    使用隐藏框架,即Iframe 用JS将它的链接修改为你要导出的那个页面 有文件下载自然会下载 而且看起来比较友好 推荐这一种方法

阁下可以先考虑一下这些思路 觉得某一种可行后 再想如何写代码 若中途有什么疑问 再行追问

追问

  现在的问题是他会执行之后的代码。
mk.show();

document.location.href="excelExportByTalksDay.action“;
mk.hide();
他执行玩show方法之后执行链接,然后直接就执行了hide方法。。但是下载Excel的窗口还没有出来。。

追答

我上面已经给你说了 你如此根本不可能执行后面的代码 因为

document.location.href="excelExportByTalksDay.action“;

这一句执行就是将此页面新加载 后面的代码都不会执行,需要执行后面的代码 我前面已经给你说过 有那三种方法。

我看你的想法分明是新打开一个下载页面 当前页面也不被刷新 那么显然不能用document.location.href了,可以用新打开窗口或隐藏iframe的方法,这两者你选其一。你确定用哪一种方法后 我再告诉你后面怎么弄

追问

使用第三种方法,irame要怎么实现呢。。

追答

首先,写一个隐藏的iframe

<iframe id="iframe_id" style="display:none;"><!doctype html><html><head><meta charset="utf-8"><title></title></head><body></body></html></iframe>

仔细看就可以看就知道,这个iframe并没有给它加链接,里面文档内也没有任何东西,并且给了它一个隐藏的样子,还有一个ID,这些都是有用的


接着,把你的

document.location.href="excelExportByTalksDay.action“;

换成

document.getElementById("iframe_id").src = "excelExportByTalksDay.action";
mk.show();//显示遮罩层

这个时候,就是在将该目标链接在框架页里打开,因为是隐藏的,所以看不到,同时,马上启用遮罩层。


那么,如何才能判断这个目标链接加载完成了呢,也有好几种方法,最简单的可以有两种:

一种是目标页面执行完毕后,用JS返回到主页面结果:

document.parent.window.mk.hide();//在框架内的目标页面执行,未经测试,不保证正确性,只提供思路

而另一种方法,则是在主页面持续检测框架内子页面的内容,你看我前面设置的iframe框架,body内没有任何内容,那么你就要在目标页面处理完后输出一些内容,当然也可以在iframe中初始写一些内容,然后在目标页面不输出任何内容,然后检测出有变化则说明执行完毕。像这样:

try_iframe = function()

    var tryif = document.getElementById("iframe_id").contentWindow.document.body.innerHTML;
    if("" != tryif)//如果抓取到的值不为空, 则表示已经执行完毕
    
        mk.hide();//执行完毕后隐藏遮罩层
    
    else
        meter = setTimeout("try_iframe()", 128);//如果抓取到的值为空,则表示未执行完毕,启用定时再执行

try_iframe();

参考技术A 执行 document.location.href后页面就重定向了,除非你创建一个iframe,然后用document.getElementById("ifrmae的id").src="......" 参考技术B 大佬,你的document.location.href
我现在做的是一个导出excel,在点击导出的时候显示一个遮罩层,执行完之后隐藏。。
这个问题怎么解决的啊?

jsp在js里获取项目名

function getRootPath() {
var curWwwPath = window.document.location.href;
var pathName = window.document.location.pathname;
var pos = curWwwPath.indexOf(pathName);
var localhostPath = curWwwPath.substring(0, pos);
//获取带"/"的项目名,如:/hotel

var projectName = pathName.substring(0, pathName.substr(1).indexOf(‘/‘) + 1);
return projectName;

}

以上是关于js document.location.href执行完url之后才之后后续的功能的主要内容,如果未能解决你的问题,请参考以下文章

在js中转到servlet用document.location.href出现404错误,别人机器上用的一模一样的代码没错,怎么回事?

js中如何获取当前浏览器的地址的值

用js轻松判断当前网络协议是http还是https

js例子记载

pdf.js实现

pdf.js实现