Почему Google Pay не работает из iPhone Safary после запроса ajax? - PullRequest
0 голосов
/ 17 июня 2020

Я пытаюсь добавить кнопку Googla Pay на веб-сайт. Я следую руководству по внедрению Google Pay (https://developers.google.com/pay/api/web/guides/tutorial).

Есть код:

var paymentsClient = getGooglePaymentsClient();
paymentsClient.isReadyToPay(getGoogleIsReadyToPayRequest())
    .then(function(response) {
        //...
    })
    .catch(function(err) {
        //...
    });

Мне нужно получить некоторые данные со стороны моего сервера перед Я вызываю приведенный выше код и отправляю HTTP-запрос. В случае успешной обработки моего почтового запроса я вызываю указанный выше код. Он отлично работает в моем браузере Android и браузере ноутбука. Но из Safari не работает. Я получаю сообщение об ошибке « Неожиданная ошибка разработчика, повторите попытку позже ». Если я позвоню без запроса ajax, он будет работать и в Safari. Может ли кто-нибудь предложить решение?

1 Ответ

1 голос
/ 18 июня 2020

Спасибо за включение jsfiddle.

Причина, по которой он не работает, заключается в том, что Google Pay пытается открыть всплывающее окно, когда вы вызываете loadPaymentData в Safari. Когда новое окно запускается в результате события щелчка (действие, инициированное пользователем), всплывающее окно открывается должным образом. Когда он запускается действием, не инициированным пользователем, Google Pay загружается в то же окно, что приводит к его сбою.

Похоже, когда вы делаете запрос ajax в обработчике кликов и затем вызовите loadPaymentData, Safari считает это действие, не инициированное пользователем.

Посмотрите следующий пример в Safari:

const ajaxButton = document.getElementById('ajax');
const nojaxButton = document.getElementById('nojax');

ajaxButton.addEventListener('click', event => {
  $.get('/echo/json/', () => {
    window.open('about:blank');
  });
});

nojaxButton.addEventListener('click', event => {
  window.open('about:blank');
});

Я бы рекомендовал избегать любые HTTP-вызовы для события нажатия кнопки до loadPaymentData. Если вы можете получить данные до нажатия кнопки, сделайте это.

Из интереса, какие данные вы получаете?

...