ОБЗОР: я использую JQuery Colorbox для отображения небольшого значка загрузки, когда заказ обрабатывается на моем веб-сайте. У небольшого процента пользователей поле цвета не закрывается само по себе и просто зависает. Это основная концепция:
Страница заказа загружает ссылку в цветовое поле, используя:
$(document).ready(function () {
$("[rel=cbox_order]").colorbox({
initialWidth: "100",
initialHeight: "100",
innerWidth: "300",
innerHeight: "100",
iframe: true,
opacity: 0.75,
overlayClose: false,
title: 'Your order is being processed, please wait...',
onLoad: function () {
$('body').css({
overflow: 'hidden'
});
$('#cboxClose').remove();
$('#cboxLoadedContent').css({
'margin-bottom': '0px',
'height': '100%'
});
$(document).unbind("keydown.cbox_close");
},
onComplete: function () {
$('#cboxLoadingGraphic').show();
$('#cboxLoadedContent').css({
'margin-bottom': '0px',
'height': '100%'
});
},
onClosed: function () {
$('body').css({
overflow: 'auto'
});
}
});
$("[rel=cbox_order]").click(function () {
$("#colorbox").attr("style", "padding-bottom: 42px; padding-right: 42px; display: inline; width: 600px; height: 468px; top: 456px; left: 602px;");
});
});
<asp:HyperLink id="lnkConfirm" class="buttonlink" rel="cbox_order" NavigateURL="~/ProcessOrder/ProcessPayment.html" Text="CONFIRM ORDER" runat="server" />
Это в основном переопределяет множество битов и ОСТАНАВЛИВАЕТ пользователя, закрывающего окно, пока заказ обрабатывается. Страница, которая была загружена в ColorBox, затем обрабатывает заказ и отправляет электронные письма с подтверждением, ТОГДА делает:
$(document).ready(function(){
window.top.location.href = '<%=Session["ProcessOrder_Redirect"].ToString()%>';
window.parent.$.fn.colorbox.close();
});
Идея в том, что он перенаправляет родительское окно на страницу подтверждения заказа, а затем закрывает окно (только для подтверждения; это работает в 95% случаев).
ПРОБЛЕМА: это не всегда работает, и я не понимаю, почему. Я могу подтвердить, что значение в сеансе содержит действительный URL-адрес. Я ввел alert(<%=Session["ProcessOrder_Redirect"].ToString()%>);
после colorbox.close(), и он появился (и остался там) для пользователей, которые застряли с действительным URL-адресом. Я не могу воспроизвести эту ошибку, поэтому я несколько застрял.
Мои мысли только о том, что а. Перенаправление не работает (в настоящее время ожидается дополнительная информация, чтобы подтвердить это) или B. ColorBox дает сбой и просто не закрывается.
Кто-нибудь может помочь мне разгадать эту загадку?
РЕДАКТИРОВАТЬ: кажется, что это ошибка перенаправления. Кто-нибудь знает, почему это не всегда работает.
Спасибо