У меня есть кнопка «Выход» на странице aspx, на которой нужно выполнить код на стороне сервера, а затем закрыть окно браузера. Кнопка имеет событие OnClick и событие OnClientClick. Событие OnClientClick вызывает метод, который должен выполнить обратную передачу, а затем закрыть окно. Код работает отлично в IE, но не будет делать postback в Chrome. Окно закрывается в обоих случаях. Вот мой код. Я проверяю, чтобы увидеть, какой браузер это, но не делать ничего другого в каждом конкретном случае в этой точке__doPostBack не работает в Chrome
function closeMainWindow(control) {
var clientIDName = control.name;
if (navigator.userAgent.indexOf('Chrome') != -1) {
__doPostBack(clientIDName, '');
window.open('', '_self', ''); //need this for Chrome
window.close();
return false;
}
else {
__doPostBack(clientIDName, '');
window.open('', '_self', ''); //bypasses warning from IE
window.close();
return false;
}
Вот код для кнопки.
<asp:Button ID="btnExit" runat="server" Text="Yes" Width="50px" OnClick="btnExit_Click" OnClientClick="javascript:return closeMainWindow(this);" />
Я был бы признателен за любые предложения о том, как сделать эту работу в Chrome или если есть лучше/другой способ, чтобы выполнить код на стороне сервера, а затем закройте окно браузера.
Есть ли ошибка в консоли Javascript в Chrome? – Oscar
Я что-то упустил или логика не идентична для Chrome и не-Chrome в вашем опубликованном коде? –
Я думаю, что попытка закрыть окно, не будучи уверенным, что ваш запрос POST полностью обработан, - плохая идея. Если вы не хотите реализовывать некоторые серверные js, как, например, @YuriyGalanter, вы должны полагаться на некоторую асинхронную отправку сообщений js, например, с помощью плагина jQuery Form (http://malsup.com/jquery/form/) – jbl