Javascript设置超时导致访问被拒绝错误
我有以下情况: Main.aspx页面-->AJAX模式弹出窗口-->iFrame-->ASP.Net母版页-->Nested.aspx页面 在Nested.aspx页面上,我有以下JQuery脚本:Javascript设置超时导致访问被拒绝错误,javascript,jquery,asp.net,iframe,Javascript,Jquery,Asp.net,Iframe,我有以下情况: Main.aspx页面-->AJAX模式弹出窗口-->iFrame-->ASP.Net母版页-->Nested.aspx页面 在Nested.aspx页面上,我有以下JQuery脚本: window.onload = function () { setTimeout(function(){ // Some Code here setTimeo
window.onload = function ()
{
setTimeout(function(){
// Some Code here
setTimeout(arguments.callee, 100);
}, 100);
}
当我关闭模式弹出窗口时,一切都会正常工作几秒钟,然后出现javascript错误“SCRIPT5:访问被拒绝”
我认为正在发生的是,计时器在页面关闭后继续运行,它试图访问iFrame之外不再存在的表单,因此出现了“访问被拒绝”错误
你知道如何在模式关闭后停止计时器吗?我怀疑我必须通过Nested.aspx page window.unload函数中的javascript来实现这一点,但不确定具体是如何实现的?您的代码与JQuery无关,也就是说,现在开始:
var timer1,timer2;
window.onload = function ()
{
timer1 = setTimeout(function(){
// Some Code here
timer2 = setTimeout(arguments.callee, 100);
}, 100);
}
// add this where needed (form close?)
clearTimeout(timer1);
clearTimeout(timer2);
您还可以在
setTimeout
函数中添加if
语句来检查表单是否实际存在。好的,为了解决这个问题,我从使用递归setTimeout()方法改为使用setInterval(),它本质上是递归的,解决了这个问题。没有特定的表单。当我说表单时,我基本上是指由iFrame承载的页面。当我关闭承载iFrame的模式时,不会调用Nest.aspx pages windows.unload函数。感谢您的帮助。这并没有完全解决问题,但却把我引向了正确的方向+1它必须在窗口上。卸载函数,我将计时器设置为全局,因此基本上可以从关闭模式的同一个函数关闭计时器。所有页面是否都来自同一个域?setInterval
正如您所说,是递归的,因为它可能会引发更多问题(代码将每隔x毫秒重复运行一次)并可能重新运行您的代码。此外,您可能必须使用clearInterval
。