這是第一個背景信息。帶有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但只問相同的問題,沒有解決方案。
任何有關這個問題的深入瞭解將不勝感激。