我有一段代码以一种出乎我意料的方式工作。让我先放下细节,所以代码看起来或多或少是这样的:
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”。我是否错误地认为它应该在分配值后立即更改?
所以我无法理解几点:
- 为什么
location.href
我一给它分配 LOGOOFF 的值就没有改变。 - 一旦
LOCATION.HREF
改变应该发生什么 LOCATION.HREF
打开浏览器并登录时如何初始化
没有任何花哨的会话跟踪机制,它是一个直接的 HTML 页面,上面的 JS 触发了 @ onunload
via 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 是我需要的唯一焦点组...