IE中的top.document.location.href属性行为(8/9)

时间:2011-11-03 12:00:52

标签: javascript dom javascript-events location-href

我有一段代码,它的工作方式对我来说意外。让我先说明细节,所以代码看起来或多或少是这样的:

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);然后才会触发注销(如下面的apapche日志中所示),但是位置href仍然与它相同 - “LogIn”。 我错误地认为它应该在分配值后立即改变吗?

所以我没有理解几点: a)为什么在我为其分配LOGOFF的值时不会更改location.href。 b)LOCATION.HREF更改后应该发生什么 c)当我打开浏览器并登录时,LOCATION.HREF如何初始化

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

我想要实现的只是了解幕后发生的事情,以及如果有警报(1),重定向发生的原因;在中间,如果没有休息则没有。在我的情况下,Apache注册了以下内容:

With timeout:
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

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

如果有人能够详细说明幕后发生的事情,那么对于阅读什么/在哪里看的任何帮助或指导都会受到赞赏。我担心我在JS引擎方面没有受过良好的教育,对我不满意。代码也不是我的:( 如果你有额外的问题我听,也许我省略了一些重要的东西:)

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

1 个答案:

答案 0 :(得分:0)

卸载页面时,

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

另请参阅:Changing window.location.href in Firefox in response to an onunload event

我建议您改为对服务器进行异步调用,注销用户等。您可以使用Ajax调用来完成此操作,使用jQuery非常简单。