Сначала информация о фоне. Веб-сайт ASP.NET 2.0 с расширениями AJAX 1.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>
И если вам интересно, что такое aspNetAjaxFix.js, посмотрите этот вопрос, который я разместил на StackOverFlow, Операция Internet Explorer прервана и проблема с задержкой
Я тоже, конечно, гуглил без особой удачи. Эта статья, похоже, актуальна, http://forums.asp.net/t/1247957.aspx, но задает только тот же вопрос, но не решает.
Любое понимание этого вопроса будет с благодарностью.