nic*_*ine 4 safari asp.net-ajax cross-browser
首先是背景信息。具有 AJAX 扩展 1.0 的 ASP.NET 2.0 网站。
我有一个奇怪的问题,只发生在 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>
Run Code Online (Sandbox Code Playgroud)
如果您想知道 aspNetAjaxFix.js 是什么,请参阅我在 StackOverFlow、Internet Explorer 的操作中止和延迟问题上发布的问题
当然,我也用谷歌搜索过这个,但运气不太好。这篇文章似乎相关,http://forums.asp.net/t/1247957.aspx,但只问同样的问题,没有解决方案。
任何对此问题的见解将不胜感激。
经过更多挖掘后,我发现了这个问题。PageRequestManager它与的方法无关add_endRequest(...),而与 Safari 和基于 WebKit 的浏览器的 ASP.NET AJAX 客户端 API 中的浏览器检测有关。
感谢ASP.NET 论坛上taliesins的这篇文章, 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().
Run Code Online (Sandbox Code Playgroud)
即使我Sys.Application.notifyScriptLoaded()在 JavaScript 中调用。
显示塞子已解决。
| 归档时间: |
|
| 查看次数: |
7234 次 |
| 最近记录: |