Подтвердить что ты не робот

Основной код входа в систему Google для веб-сайтов, который не работает в Internet Explorer 11

Я пытаюсь использовать Google Sign-In для веб-сайтов (https://developers.google.com/identity/sign-in/web/) и заметил, что мое решение не работает в Internet Explorer 11. Чтобы попытаться устранить как можно больше факторов, я создал простой тестовый пример на основе кода примера, предоставленного Google.

Я тестировал его в Chrome на своем ПК с Windows 7, Chrome на своем Mac, Safari на своем Mac, Firefox на моем Mac и Safari на своем iPhone. Он работает на всех этих устройствах (например, когда я нажимаю кнопку входа в систему и выбираю/вводя свой аккаунт Google, он возвращается на страницу, и кнопка говорит "Подписано" ).

Однако он не работает в Internet Explorer 11 на ПК или, как ни странно, Chrome для iOS. Когда нажимается кнопка, открывается окно, позволяющее мне выбрать мою учетную запись Google, но после выбора, окно закрывается и возвращается на страницу кнопкой, которая все еще говорит "Вход".

Вот пример кода:

<html>
<head>
<meta name="google-signin-client_id" content="61023618497-vqfbod57f26ncjl9d6firk3t09ve4tt3.apps.googleusercontent.com">
<script src="https://apis.google.com/js/platform.js" async defer></script>
</head>
<body>
<div class="g-signin2"></div>
</body>
</html>

Любые идеи относительно того, что может происходить? Я искал вокруг и не нашел никаких решений.

Одна идея заключалась в том, чтобы добавить "accounts.google.com" в надежные сайты IE. Это не сработало. Я также попытался получить доступ к странице через https вместо http. Это тоже не имело значения. Что-нибудь еще я должен попробовать?

4b9b3361

Ответ 1

Я столкнулся с той же проблемой сейчас, через несколько месяцев.

Если вы посмотрите на:

https://developers.google.com/identity/sign-in/web/build-button

и попробуйте ввести с помощью демонстрационной кнопки, он не работает с IE11 (но он работает с другими браузерами, которые я использую в разных ОС). Я не мог найти решения.

Я оставляю комментарий для будущего читателя, который ищет ту же проблему в будущем. Если демонстрационная кнопка в Google не работает, она может по крайней мере быть уверенным, что проблема, вероятно, не в ее коде.:)

Ответ 2

Убедитесь, что IE 11 не настроен для блокировки всех сторонних файлов cookie.

Необходимы файлы cookie сторонних разработчиков, и пользовательский опыт, который возникает, когда сторонние файлы cookie блокируются - как вы обнаружили, оставляет желать лучшего. Пользователю не сообщается предупреждение или сообщение об ошибке.

Вы можете попытаться поймать ошибку до ее возникновения. Можно определить, заблокированы ли сторонние файлы cookie, пытаясь установить файл cookie на втором домене (который вы контролируете), а затем сделать второй запрос, чтобы убедиться, что cookie установлен. Вам понадобится script или что-то на вашем сервере, которое может установить и проверить файл cookie (это невозможно сделать с использованием только JavaScript из-за модели безопасности браузера).

Ответ 3

У меня был успех: Загрузка script, чтобы инициировать отрисовку кнопки Google и т.д. Из $document.ready. (т.е. что бы вы ни делали в apis.google.com/js/client:platform.js?onload= x)

например.

<script src="https://apis.google.com/js/client:platform.js?onload=startApp" async defer></script>

Переместите startApp() сюда:

$(document).ready(function () {
    startApp();

Где startApp() выглядит примерно так:

function startApp() {
    gapi.load('auth2', function () {
        gapi.client.load('plus', 'v1').then(function () {
            gapi.signin2.render('signin-button', {
                scope: 'https://www.googleapis.com/auth/plus.login',
                fetch_basic_profile: false
            });
            gapi.auth2.init({
                fetch_basic_profile: false,
                scope: 'https://www.googleapis.com/auth/plus.login'
            }).then(
                function () {
                    console.log('init');
                    auth2 = gapi.auth2.getAuthInstance();
                    auth2.isSignedIn.listen(updateSignIn);
                    auth2.then(updateSignIn());
                });
        });
    });
}

Ответ 4

Я изо всех сил пытался заставить этот пример работать на локальном хосте, но как только я развернул его с реальным URL-адресом, он работал.