1

我有一段代码以一种出乎我意料的方式工作。让我先放下细节,所以代码看起来或多或少是这样的:

window.onunload = doUnload;
var unLoadTimer;
var gInvokeOnBeforeUnload = true;
function setInvokeOnBeforeUnload() { gInvokeOnBeforeUnload = false; }

function doUnload() {
if(gInvokeOnBeforeUnload==true){
    setInvokeOnBeforeUnload();
    top.document.location.href = "LogOff";
    clearTimeout(unLoadTimer); 
}
//Function Midpoint
if (top.document.readyState != "complete" && gLogOffClick == false){
    unLoadTimer = setTimeout("doRealUnload("+func_call_count+")", 800); 
    //its just a timeout for the function to be called again
}
}

我还如何添加日志记录,但为了保持代码小而排除在示例之外。我面临的问题top.document.location.href是没有重新分配给“LogOff”,并且仍然等于我在网站上打开的第一个起始页面,称之为“LogIn”。

触发window.onunload 我击中的事件F5(并且它一直发生),但注销未分配给location.href. 仅当在“//Function Midpoint”注释标记处添加一个简单的alert(1); 然后触发注销(如下面的 Apache 日志中所示),但是位置 href 仍然与以前相同 - “LogIn”。我是否错误地认为它应该在分配值后立即更改?

所以我无法理解几点:

  1. 为什么location.href我一给它分配 LOGOOFF 的值就没有改变。
  2. 一旦LOCATION.HREF改变应该发生什么
  3. LOCATION.HREF打开浏览器并登录时如何初始化

没有任何花哨的会话跟踪机制,它是一个直接的 HTML 页面,上面的 JS 触发了 @ onunloadvia F5

我想要实现的只是了解幕后发生的事情以及如果有警报(1)会发生重定向的原因;介于两者之间,如果没有休息,则不会。就我而言,Apache 注册了以下内容:

超时:

IP.IP.IP.IP - xxx [28/Oct/2011:10:38:50] "GET /LogOff HTTP/1.1" 200 208
IP.IP.IP.IP - xxx [28/Oct/2011:10:38:50] "GET /LogIn HTTP/1.1" 401 540
IP.IP.IP.IP - xxx [28/Oct/2011:10:38:52] "GET /LogIn HTTP/1.1" 200 2898

没有超时:

IP.IP.IP.IP - xxx [28/Oct/2011:10:41:04] "GET /LogIn HTTP/1.1" 200 2726

任何关于阅读什么/在哪里看的帮助或指导都值得赞赏,如果有人能详细说明幕后发生的事情,那就更好了。恐怕我在 JS 引擎方面没有受过良好的教育,这对我不利。代码也不是我的:(

如果你有额外的问题我正在听,也许我在那里遗漏了一些重要的东西:)

没有尝试在其他浏览器中进行测试,因为 IE 是我需要的唯一焦点组...

4

1 回答 1

0

document.location.href卸载页面时为只读。因此,当用户想要离开页面时,您不能更改此属性。这是一个安全“功能”。

另请参阅:更改 Firefox 中的 window.location.href 以响应 onunload 事件

我建议您改为对服务器进行异步调用、注销用户等。您可以使用 Ajax 调用来执行此操作,这使用 jQuery 相当简单。

于 2011-11-03T12:15:55.200 回答