Я реализую функцию «Войти через 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.
Я также получил ту же самую ошибку. Я исправил это, добавив
use_fedcm_for_prompt: true
в объект google.accounts.id.initialize.
Я не вызываю google.accounts.id.prompt() точно так же, как вы, но мне также пришлось добавить тайм-аут в 100 мс вокруг приглашения, чтобы оно заработало:
setTimeout(() => { window.google.accounts.id.prompt()}, 100)