代码之家  ›  专栏  ›  技术社区  ›  nickytonline

Safari和ASP。NET AJAX PageRequestManager.add_endRequest函数并不总是启动

  •  3
  • nickytonline  · 技术社区  · 16 年前

    首先是背景信息。ASP。NET 2.0网站,带有AJAX扩展1.0。

    我有一条友好的“正在处理请求…”消息,当您提交页面异步或非异步回发时会出现,并在回发后隐藏。在异步回发的情况下,我使用 PageRequestManager s add_endRequest(...) 方法隐藏“正在处理请求…”消息。这在FireFox、IE 6/7/8和Opera中效果很好,但由于某种原因,在Safari(Windows和Mac版本)上 它并不总是着火。我对跨浏览器很感兴趣,所以想知道是否有人对如何解决这个问题有任何想法。

    这对我来说是一个阻碍,因为不仅会出现“Processing Request…”消息,而且我还会在整个页面上放置一个透明的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>
    

    Internet Explorer's Operation Aborted and Latency Issue

    http://forums.asp.net/t/1247957.aspx

    2 回复  |  直到 8 年前
        1
  •  4
  •   nickytonline    16 年前

    PageRequestManager s add_endRequest(...) ASP中浏览器检测的方法和一切。NET AJAX客户端API,用于Safari和基于WebKit的浏览器。

    感谢这篇来自 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().
    

    Sys.Application.notifyScriptLoaded() 在我的JavaScript中。

        2
  •  3
  •   Meysam Chegini    8 年前

    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>