Safari和ASP.NET AJAX PageRequestManager.add_endRequest函数并不总是被触发

时间:2009-06-11 13:50:02

标签: asp.net-ajax safari cross-browser

首先是背景信息。带有AJAX Extensions 1.0的ASP.NET 2.0 Web站点。

我有一个奇怪的问题,只发生在Safari中,我也只能假设Chrome,因为他们都使用WebKit。我也在网站上使用jQuery,但是目前对jQuery的引用只加载在一个页面上,所以我认为这不是问题。

我提交了一个友好的“处理请求...”消息,当您提交页面异步或非异步回发时会显示该消息并在回发后隐藏。在异步回发的情况下,我使用PageRequestManager的{​​{1}}方法来隐藏“处理请求...”消息。这在FireFox,IE 6/7/8和Opera中运行良好但由于某些原因在Safari(Windows和Mac版本)上,add_endRequest(...)并不总是激发。我只是关于跨浏览器,所以只是想知道是否有人对如何解决这个问题有任何想法。

这对我来说是一个显示限制因素,因为不仅会出现“处理请求...”消息,而且我还在整个页面的顶部放置一个透明div,以防止在提交后出现多次点击,因此页面变得无法使用除非你知道如何破解CSS以隐藏透明div。

以下是我的母版页标记的代码片段,用于处理我的“处理请求...”消息:

add_endRequest(...)

如果您想知道aspNetAjaxFix.js是什么,请参阅我在StackOverFlow上发布的这个问题,Internet Explorer's Operation Aborted and Latency Issue

我也用Google搜索了这个没有太多运气的东西。这篇文章似乎是相关的,http://forums.asp.net/t/1247957.aspx但只是提出同样的问题,没有解决方案。

非常感谢对这个问题的任何见解。

2 个答案:

答案 0 :(得分:4)

经过一番挖掘后,我发现了这个问题。它与PageRequestManager的{​​{1}}方法无关,而且与基于Safari和WebKit的浏览器的ASP.NET AJAX客户端API中的浏览器检测无关。

感谢ASP.NET论坛taliesins上的http://forums.asp.net/t/1252014.aspx帖子,{{3}}。我发现这篇文章的第一次看到我收到了这个错误:

add_endRequest(...)

即使我在JavaScript中调用了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().

显示塞子已解决。

答案 1 :(得分:0)

1-create 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-change ScriptManager

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