В настоящее время я сталкиваюсь с действительно сложной ошибкой в моем коде.Этот код работает на моем 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);
});
}
});
Ошибка молчит, ни на одной из консолей нет ошибок.Спасибо, что дочитали до здесь!