这是第一个背景信息。带有AJAX扩展1.0的ASP.NET 2.0 Web站点。Safari和ASP.NET AJAX PageRequestManager.add_endRequest函数不总是触发
我有一个奇怪的问题,只发生在Safari中,我只能假设Chrome,因为他们都使用WebKit。我也在网站中使用jQuery,但是当前对jQuery的引用只加载到一个页面上,所以我不认为这是问题。
我有一个友好的“处理请求...”消息,当您提交页面异步或非异步回发时出现)并在回发后隐藏。在异步回发的情况下,我使用PageRequestManager
的add_endRequest(...)
方法来隐藏“处理请求...”消息。这在FireFox,IE 6/7/8和Opera中非常适用,但由于Safari(Windows和Mac版本)的某些原因,add_endRequest(...)
并不总是会触发。我所有关于跨浏览器,所以只是想知道如果任何人有任何想法如何解决这个问题。
这对我来说是一个阻碍,因为不仅“处理请求...”消息出现,而且我还在整个页面上放置了一个透明的div,以防止提交后多次点击,因此页面变为除非您知道如何破解CSS来隐藏透明div,否则无法使用。
下面是我做什么来处理我的我的母版页的标记代码片段“处理请求...”消息:
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<script type="text/javascript" src="<%= ResolveClientUrl("~/Script/aspNetAjaxFix.js") %>"></script>
<script type="text/javascript" >
(function() {
var processingID = "<%=processing.ClientID%>"
var prm = Sys.WebForms.PageRequestManager.getInstance();
if (prm)
{
prm.add_endRequest(
function (sender, args) {
//alert('Fired!')
if (top['showAsyncProcessingWindow'])
{
setTimeout(function(){document.getElementById(processingID).className="LockOff";document.getElementById('processMe').className='processMeLockOff';if(typeof(showIE6Selects)!="undefined"){showIE6Selects();}}, 1000);
top['showAsyncProcessingWindow'] = false;
}
if(args.get_error() && args.get_error().name === 'Sys.WebForms.PageRequestManagerServerErrorException')
{
args.set_errorHandled(args._error.httpStatusCode == 0);
}
});
}
})();
</script>
如果你想知道aspNetAjaxFix.js是什么,看到这个我发布在StackOverFlow上的问题,Internet Explorer's Operation Aborted and Latency Issue
我也搜索了这个当然没有多少运气。这篇文章似乎是相关的,http://forums.asp.net/t/1247957.aspx但只问相同的问题,没有解决方案。
任何有关这个问题的深入了解将不胜感激。