Ошибка AbortError возникает при вызове google.accounts.id.prompt

Я реализую функцию «Войти через Google» на веб-странице, следуя инструкциям на этой странице: https://developers.google.com/identity/gsi/web/reference/js-reference.

Я хотел сделать так, чтобы при нажатии кнопки с пользовательским стилем появлялось всплывающее окно «Войти через Google». Таким образом, я сделал так, чтобы google.accounts.id.prompt вызывался при нажатии кнопки следующим образом:

<html>
  <body>
    <script src = "https://accounts.google.com/gsi/client" async></script>
    <script>
      function handleCredentialResponse(response) {
        console.info("Encoded JWT ID token: " + response.credential);
      }
      window.onload = function () {
        google.accounts.id.initialize({
          client_id: "XXXXXXXXX.apps.googleusercontent.com",
          callback: handleCredentialResponse
        });
        document.getElementById("buttonDiv").onclick = function() {
          google.accounts.id.prompt();
        };
      }
    </script>
    <div id = "buttonDiv">test</div>
  </body>
</html>

Недавно я заметил, что эта функция перестала работать. При вызове google.accounts.id.prompt в консоль разработчика выводится следующее сообщение об ошибке, а всплывающее окно входа не появляется:

[GSI_LOGGER]: FedCM get() rejects with AbortError: Request has been aborted.

Я заметил эту ошибку 7 апреля 2024 года. Не знаю, когда она начала возникать, но по состоянию на 20 марта 2024 года она работала без проблем. Более того, эта проблема возникает в Google Chrome, но не в Firefox.

Могут ли быть какие-либо потенциальные причины и решения этой проблемы?

🤔 А знаете ли вы, что...
JavaScript позволяет создавать асинхронные запросы к серверу с помощью технологии AJAX.


1
399
2

Ответы:

Я также получил ту же самую ошибку. Я исправил это, добавив

use_fedcm_for_prompt: true

в объект google.accounts.id.initialize.

Я не вызываю google.accounts.id.prompt() точно так же, как вы, но мне также пришлось добавить тайм-аут в 100 мс вокруг приглашения, чтобы оно заработало:

setTimeout(() => { window.google.accounts.id.prompt()}, 100)


Решено

На самом деле это была ошибка в библиотеке «Вход с помощью Google One Tap». Ошибка исправлена. У вас должна быть возможность вызвать google.accounts.id.prompt() напрямую, не используя обходной путь setTimeout().