Я делал интеграцию с экварингом Сбербанка. При создании ордера их API возвращает ссылку на страницу оплаты.
Когда пользователь ввел сумму и нажал кнопку «Оплатить», мне нужно пользователя перевести по ссылке сбера на страницу оплаты.
Сначала я использовал в скрипте window.open и пользователь вынужден был реагировать на этот не совсем понятный и даже пугающий запрос.
Хром открывает вкладку без предупреждения блокировки всплывающих окон, если команда для открытия вкладки, всплывающего окна происходит из доверенного события.
В моем случае пользователь выполняет щелчок, поэтому у меня есть доверенное событие. Однако я теряю этот доверенный контекст, выполнив запрос Ajax.
Можно обойти это — выполнив синхронный запрос Ajax, который заблокирует ваш браузер во время его запуска, но сохранит контекст события.
Либо открыть новую вкладку с прелоадером до выполнения Ajax запроса, а потом в success сделать редирект.
$("body").on("click", "#AddFundSubmit", function (e) { e.preventDefault(); if ($(this).text() != 'Пополнить') { return false; } if (!MinimalAddFund()) return false; //Соберем массив параметров для оплаты var payParams = { '[0].Key': 'name', '[0].Value': $('input[name="name"]').val(), '[1].Key': 'cost', '[1].Value': $('input[name="cost"]').val(), '[2].Key': 'phone_number', '[2].Value': $('input[name="phone_number"]').val(), }; //Перед отправкой запроса откроем новый таб и выставим прелоадер newWindow = window.open('about:blank', 'tempWindow'); $(newWindow.document).find('body').append('<div class="loading">Загрузка страницы оплаты...</div>'); $.ajax({ url: "/Payment/Pay/", method: "POST", data: payParams, beforeSend: function () { $('#AddFundSubmit').text("Подождите..."); }, success: function (response) { $('#AddFundSubmit').text("Пополнить"); $(newWindow.document).find('.loading').remove(); //скрываем прелоадер newWindow.location.replace(response); //делаем редирект на страницу оплаты }, error: function () { newWindow.close(); // В случае ошибки при получении урла закроем этот таб $('#AddFundSubmit').text("Пополнить"); } }); return false; });