asp.net-ajax - control - jquery ajax header cross domain
Safari y ASP.NET AJAX PageRequestManager.add_endRequest Función que no siempre se activa (2)
Bien después de excavar más, descubrí el problema. No tiene nada que ver con el PageRequestManager
add_endRequest(...)
y todo lo relacionado con la detección del navegador en la API ASP.NET AJAX del lado del cliente para buscadores basados en Safari y WebKit.
Gracias a esta publicación de Taliesins en los foros de ASP.NET, http://forums.asp.net/t/1252014.aspx . Encontré esta publicación al ver por primera vez que estaba recibiendo este error:
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().
a pesar de que estaba llamando a Sys.Application.notifyScriptLoaded()
en mi JavaScript.
Mostrar stopper resuelto.
Aquí está la información de fondo primero. Sitio web ASP.NET 2.0 con extensiones AJAX 1.0.
Tengo un problema extraño que solo ocurre en Safari y solo puedo asumir Chrome, ya que ambos usan WebKit. También uso jQuery en el sitio, pero actualmente la referencia a jQuery solo está cargada en una página, así que no creo que este sea el problema.
Tengo un mensaje de "Solicitud de procesamiento ... amigable" que aparece cuando envía una devolución de datos asincrónica o no asincrónica y se oculta después de la devolución. En el caso de la devolución de datos asincrónica, utilizo el PageRequestManager
add_endRequest(...)
para ocultar el mensaje "Solicitud de procesamiento ...". Esto funciona muy bien en FireFox, IE 6/7/8 y Opera, pero por alguna razón en Safari (versiones de Windows y Mac), add_endRequest(...)
no siempre se add_endRequest(...)
. Me refiero al navegador cruzado, así que me pregunto si alguien tiene alguna idea sobre cómo solucionarlo.
Esto es un obstáculo para mí porque no solo aparece el mensaje "Solicitud de procesamiento ...", sino que también coloco un div transparente en la parte superior de la página para evitar múltiples clics después de enviarlo, por lo que la página se vuelve inutilizable a menos que sepa cómo hackear el CSS para ocultar el div transparente.
Aquí está el fragmento de código del marcado de la página maestra de lo que hago para manejar mi mensaje de "Solicitud de procesamiento ...":
<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>
Y si se pregunta qué es aspNetAjaxFix.js, consulte esta pregunta que publiqué en StackOverFlow, Operation Aborted and Latency Issue de Internet Explorer.
También busqué en Google esto, por supuesto, sin mucha suerte. Este artículo parece ser relevante, http://forums.asp.net/t/1247957.aspx , pero solo hace la misma pregunta, no hay solución.
Cualquier idea sobre este tema sería muy apreciada.
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>