LocalStorage и всплывающее окно не работает на ПК с Windows - PullRequest
1 голос
/ 12 июля 2019

В настоящее время я сталкиваюсь с действительно сложной ошибкой в ​​моем коде.Этот код работает на моем MacOS (на Firefox, Opera, Safari и Chrome), а также на другой машине с Windows, которая у меня есть.Однако он не работает на компьютере друга с помощью Windows, с Opera, Chrome или Edge.

Что код делает:

  • Пользователь нажимаетна кнопке
  • Я открываю всплывающее окно для стороннего веб-сайта, которое перенаправляет меня обратно на мой сайт с кодом на URL-адресе
  • Я использую этот код для получения моего сервера, который выбирает API дляинформация о пользователе
  • Я получаю эту информацию во всплывающем окне и сохраняю ее в localStorage
  • Главное окно обнаруживает, что произошло событие хранилища, и отображает информацию о пользователе

Ошибка может проявляться следующими способами:

  • Всплывающее окно закрывается принудительно (даже если не запущена функция windows.close)
  • Даже еслиданные хранятся во всплывающем окне, и я вижу их там, они не отображаются в главном окне хранения

Я пробовал postMessage вместо localStorage и работает лучше, чем localStorage .При использовании postMessage ошибка не проявляется при использовании частного режима Opera в Windows.

Я пытался использовать Cookies , но они не подходят для моего варианта использования, потому что мне нужно сохранить изображение пользователя, и оно слишком велико для cookie.

Я такжепопытался открыть новую вкладку вместо окна, и ошибка не исчезла.

Я всегда очищал кеш и localstorage .У меня также были отключены расширения.Основной веб-сайт и всплывающее окно находятся в одном домене и протоколе.Разница заключается в том, что всплывающее окно находится в каталоге / redirect? Code = xxxxxxxx

Еще один странный факт: у нас было два разных ветки для этого проекта в git: «master» и «development».И опубликованные на heroku, и 'Develop' не имели ошибок на ПК моих друзей.«Develop» опередил «master» без конфликтов, мы объединились, и ошибка появилась на веб-сайте «master».

page.js (главное окно)

function loginButtonAction(event) {

    window.open(fenixRequestUserPermissionURL, '_blank', 'width=750,height=675');
    fenixLoginButton.classList.add('is-loading');

    window.addEventListener('storage', function() {

        var userData = JSON.parse(localStorage.getItem('fenix-user'));
        registerUser(userData);
        localStorage.removeItem('fenix-user');

    });

    event.preventDefault();
    fenixLoginButton.removeEventListener('click', loginButtonAction);
}

fenixLoginButton.addEventListener('click', loginButtonAction);

popup.js (окно, на которое перенаправляется первая ссылка)

window.addEventListener('load', function() {

    var params = new URL(window.location.href).searchParams;
    if (params.has('code')) {
        var code = params.get('code');

        fetch('/fetchInfo/' + code)
            .then(function (response) {
                return response.json();
            })
            .then(function(received) {
                localStorage.setItem('fenix-user', JSON.stringify(received));
                window.close();

            }).catch(function(error) {
                console.warn(error);
            });
    }

});

Ошибка молчит, ни на одной из консолей нет ошибок.Спасибо, что дочитали до здесь!

...