在 ReportViewer 生成的 HTML 中有以下代码行(我尝试通过删除多余的信息使其更具可读性)
setTimeout("frames['ReportViewer1TouchSession0'].location.replace('/Reserved.ReportViewerWebControl.axd?...&TimerMethod=KeepAliveMethodReportViewer1TouchSession0...", 0);
function KeepAliveMethodReportViewer1TouchSession0() {
setTimeout("frames['ReportViewer1TouchSession0'].location.replace('/Reserved.ReportViewerWebControl.axd?...TimerMethod=KeepAliveMethodReportViewer1TouchSession0....", -1703027296);
}
当调用 Reserved.ReportViewerWebControl.axd 时,它会发出一个返回以下 HTML 的 GET 请求:
<html><body><script type="text/javascript">parent.KeepAliveMethodReportViewer1TouchSession0();</script
所以实际上它变成了一个递归函数,并且因为 KeepAliveMethodReportViewer1TouchSession0 调用了一个带有负超时值的设置超时,在 Firefox 中它被立即调用,在大约 10 秒内 Firebug 在一分钟内记录了超过 150 个 GET 请求,记录了超过 700 个请求。这会导致 Firefox 的停止按钮和光标疯狂地闪烁。
如果有人知道如何调整keepalive请求的超时时间,那么我将非常感谢您的帮助。