2009-06-11 16 views
3

這是第一個背景信息。帶有AJAX擴展1.0的ASP.NET 2.0 Web站點。Safari和ASP.NET AJAX PageRequestManager.add_endRequest函數不總是觸發

我有一個奇怪的問題,只發生在Safari中,我只能假設Chrome,因爲他們都使用WebKit。我也在網站中使用jQuery,但是當前對jQuery的引用只加載到一個頁面上,所以我不認爲這是問題。

我有一個友好的「處理請求...」消息,當您提交頁面異步或非異步回發時出現)並在回發後隱藏。在異步回發的情況下,我使用PageRequestManageradd_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但只問相同的問題,沒有解決方案。

任何有關這個問題的深入瞭解將不勝感激。

回答

4

經過多次挖掘後,我發現了這個問題。它與PageRequestManageradd_endRequest(...)方法無關,並且與基於Safari和WebKit的瀏覽器的ASP.NET AJAX客戶端API中的瀏覽器檢測有關。

感謝來自taliesins的ASP.NET論壇文章http://forums.asp.net/t/1252014.aspx。我發現這個職位通過我得到這個錯誤能看見的第一:

Sys.ScriptLoadFailedException: The script 'http://localhost:2241/WebResource.axd?d=hvpXhV5kEMwLgAoaIglURevR_XTtDTBoKZ3aZWWaIvEkBXbLudri1AIv5bRs5f6licjCZMs3Z3MioQLqLTXV98582pKDHkD7BucGkKsPLz41&t=633444640020014740' failed to load. Check for: 
Inaccessible path. 
Script errors. (IE) Enable 'Display a notification about every script error' under advanced settings. 
Missing call to Sys.Application.notifyScriptLoaded(). 

即使我打電話在我的JavaScript Sys.Application.notifyScriptLoaded()

顯示塞子已解決。

0

1創建WebKit.js

Sys.Browser.WebKit = {}; //Safari 3 is considered WebKit 
if (navigator.userAgent.indexOf('WebKit/') > -1) { 
    Sys.Browser.agent = Sys.Browser.WebKit; 
    Sys.Browser.version = parseFloat(navigator.userAgent.match(/WebKit\/(\d+(\.\d+)?)/)[1]); 
    Sys.Browser.name = 'WebKit'; 
} 

-2-變化的ScriptManager

<asp:ScriptManager ID="ScriptManager1" runat="server"   AsyncPostBackTimeout="600"> 
      <Scripts> 
       <asp:ScriptReference Path="~/JScripts/webkit.js" /> 
      </Scripts> 
     </asp:ScriptManager>