2010-08-04 83 views
0

我使用jQuery的动画一些DOM元素,但我希望页面动画完成时重新加载,所以我想这:JavaScript在关闭/匿名函数中重新加载页面?

function childDisablePopup() 
{ 
    $("#popup2",window.parent.document).animate({ 
     width: "0px", 
     marginLeft: 0 
    }, "fast", 
    function() 
    { 
     $("#popup2",window.parent.document).animate({ 
      height: "0px", 
      marginTop: 0 
     }, "fast", 
     function() 
     { 
      $("#backgroundPopup",window.parent.document).fadeOut("fast", 
       function() 
       { 
        $("#popup2",window.parent.document).remove(); 
        window.location.reload(true); 
       }); 
     }); 
    }); 
} 

然而,当动画完成的,而不是重新加载页面,我得到这个错误:

uncaught exception: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIDOMLocation.reload]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: etc...]

这是怎么回事?页面重新加载不能放在函数中(){} closure?

注意:浏览器:firefox 3.6.8。

观众的浏览器:Firefox 3以上,铬,Safari 5以上

注:我也尝试过window.location.reload(true);其返回同样的错误,我试图window.location.href=window.location.href其返回:

uncaught exception: [Exception... "Component returned failure code: 0x80004003 (NS_ERROR_INVALID_POINTER) [nsIDOMLocation.href]" nsresult: "0x80004003 (NS_ERROR_INVALID_POINTER)" location: "JS frame :: etc...]

+0

'window.location.href'可能不会接受赋值。试试'window.location.replace(window.location.href);'?我开始倾向于最初的想法,那就是试图与父窗口的DOM进行交互......坦率地说,我很难过。 – 2010-08-04 18:44:31

+0

我似乎无法重现异常。 (我也使用Firefox 3.6.8)除了我没有在选择器中使用'window.parent.document',所以它可以是你的脚本中的其他地方。 – casablanca 2010-08-04 19:04:57

+0

好吧,这很奇怪,我甚至不能做'alert(window.location.href)'而不抛出相同的异常。 – 2010-08-04 22:31:34

回答

0

问题解决。我正在做的是打开一个iframe,然后删除它。我想在iframe删除时触发页面重新加载,但是,该脚本是从iframe中运行的,所以当iframe不再存在时,脚本不再有运行的上下文。实质上,当窗口不存在时,我无法调用window.location!然而,window.parent.location也不起作用,因为一旦iframe消失,我实际上调用了null.parent,它也不存在。我想我可能不得不改变设计了一下。多谢你们!

3

window.location.reload()不采用任何参数,而不像调用JavaScript函数,在调用浏览器API函数时,浏览器对可以/必须传递给该函数的参数数量非常严格。

编辑:感谢OP指出这一点,Firefox至少允许一个参数传递给reload()。 (见http://developer.mozilla.org/en/window.location

+0

实际上,根据MDC:https://developer.mozilla.org/en/window.location reload()需要1个参数,forceget如果设置为true,它强制一个请求到服务器而不是简单的重新加载来自浏览器缓存。 – 2010-08-04 18:30:35

+0

好的电话,我的goto JS参考失败了。 http://www.w3schools.com/jsref/met_loc_reload。asp – 2010-08-04 18:41:12

+0

嗯,在这种情况下,forceget参数可能是一个firefox唯一的实现。 window.location对象不是ECMA的javascript规范的一部分,所以我猜可能是依赖于浏览器的实现。我似乎无法找到webkit的javascript文档。 – 2010-08-04 18:54:01

0

我有同样的确切问题。 我通过只在页面加载时调用代码来解决这个问题。 对我来说,下面的脚本都起作用了。

window.addEventListener ("DOMContentLoaded", doStuff, false); 

window.addEventListener ("load", doStuff, false); 

如果这两个作品你喜欢的第一个。

相关问题