Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   localStorage отсутствует на другой странице (https://javascript.ru/forum/misc/79846-localstorage-otsutstvuet-na-drugojj-stranice.html)

_marisha 01.04.2020 06:44

localStorage отсутствует на другой странице
 
Доброго времени суток!
Подскажите, пожалуйста, по какой причине может отсутствовать localStorage на других страницах?
Пример: в списке товаров ID выделенных товаров добавляю в localStorage, перехожу в карточку товара, созданного ключа в localStorage нет :-?

voraa 01.04.2020 08:41

С сервера страницы берете или прямо с компа?
По любому, хотелось бы код, как записываете в память, как считываете.

_marisha 01.04.2020 11:42

voraa, спасибо что откликнулись.
Делаю так:
localStorage.setItem('activeFavoriteID', JSON.stringify(activeFavoriteID));

Получаю так (в списке товаров созданный ключ есть, а в самом товаре нет):
var activeFavoriteID = JSON.parse(localStorage.getItem('activeFavoriteID'));

voraa 01.04.2020 12:14

Ответьте, откуда берутся страницы, с сервера или с локального компьютера?
Каким браузером тестируете?
Если с локального, то в Файрфоксе такое возможно, если страницы находятся в разных каталогах.
В любом случае в отладчике браузера можно посмотреть, что находится в локальном хранилище.

_marisha 01.04.2020 12:25

Цитата:

Сообщение от voraa (Сообщение 522037)
Ответьте, откуда берутся страницы, с сервера или с локального компьютера?

- с сервера.
Цитата:

Сообщение от voraa (Сообщение 522037)
Каким браузером тестируете?

- тестирую в хроме и Файрфоксе
Цитата:

Сообщение от voraa (Сообщение 522037)
Если с локального, то в Файрфоксе такое возможно, если страницы находятся в разных каталогах.

- замечено, что в хроме данные в localStorage есть :-?
Возможно ли что и в случае с сервером подобная проблема наблюдается в Файрфоксе?

voraa 01.04.2020 12:31

В случае сервера такое будет, если они в разных доменах. Но это касается всех браузеров.

_marisha 01.04.2020 12:43

Цитата:

Сообщение от voraa (Сообщение 522040)
В случае сервера такое будет, если они в разных доменах. Но это касается всех браузеров.

- интересно... Ситуация становится более непонятной/запутанной. Ведь проблема наблюдается только в мозиле :-?

Подскажите, пожалуйста, каким образом возможно проверить что обращение происходит к другому домену?
В системе есть 2 сайта, но доработки ведутся в шаблоне необходимого сайта.

_marisha 01.04.2020 13:31

var activeFavoriteID = JSON.parse(localStorage.getItem('activeFavoriteID'));

В мозиле в консоли TypeError: activeFavoriteID is null

В хроме ошибок нет.

laimas 01.04.2020 13:41

Цитата:

Сообщение от _marisha
В мозиле в консоли TypeError: activeFavoriteID is null

Все браузеры будут запрещать доступ к данным другого домена, о чем уже говорилось. То что домен другой, это покажет и URL, а данные локального хранилища как и куки для каждого домена свои. Они у вас вообще пишутся в FF, в отладчике вы их наблюдаете?

_marisha 01.04.2020 13:58

В консоли на странице списка товаров данные есть

laimas 01.04.2020 14:01

Если они есть, то они будут на всех страницах этого домена.

voraa 01.04.2020 14:05

Цитата:

Сообщение от _marisha (Сообщение 522042)
- интересно... Ситуация становится более непонятной/запутанной. Ведь проблема наблюдается только в мозиле :-?

Подскажите, пожалуйста, каким образом возможно проверить что обращение происходит к другому домену?
В системе есть 2 сайта, но доработки ведутся в шаблоне необходимого сайта.

Поставьте в каждой странице перед обращением к localStorage
console.log(document.domain)
И посмотрите, одинаковое выводится или нет

laimas 01.04.2020 14:08

Цитата:

Сообщение от voraa
console.log(document.domain)

А взгляда на адресную строку недостаточно? :)

_marisha 01.04.2020 14:27

Цитата:

Сообщение от voraa (Сообщение 522053)
Поставьте в каждой странице перед обращением к localStorage
console.log(document.domain)
И посмотрите, одинаковое выводится или нет

- Доменное имя выводится корректно что в списке товаров, что в самом товаре.
В адресной строке доменное имя одинаковое.

voraa 01.04.2020 14:28

Цитата:

Сообщение от laimas (Сообщение 522054)
А взгляда на адресную строку недостаточно? :)

Не всегда.
Например страницы одна с http:sub1.company.org, другая с http:sub2.company.org могут изменить document.domain.

document.domain = "company.org"
И будут считаться, что они с одного домена

voraa 01.04.2020 14:34

Цитата:

Сообщение от _marisha (Сообщение 522047)
var activeFavoriteID = JSON.parse(localStorage.getItem('activeFavoriteID'));

В мозиле в консоли TypeError: activeFavoriteID is null

А в какой момент появляется эта ошибка?
Тут что то странное. Надо просто сидеть в отладчике и по шагам смотреть, куда, что записывается и когда, что меняется,
или так

var stor = localStorage.getItem('activeFavoriteID');
console.log(stor);
var activeFavoriteID = JSON.parse(stor);
console.log(activeFavoriteID);

laimas 01.04.2020 14:35

Адресная строка то не скрывает субдомен.

_marisha 01.04.2020 14:45

Походу проблема найдена.
В настройках соединения на вкладке "Разрешения" необходимо установитьпараметр "Устанавливать куки = Разрешить"
До этого была отмечена галка "Настройка по умолчанию" и радиобаттон ни один не отмечен
В таком случае функционал работает
Странное поведение...

_marisha 01.04.2020 14:47

Цитата:

Сообщение от voraa (Сообщение 522060)
А в какой момент появляется эта ошибка?
Тут что то странное. Надо просто сидеть в отладчике и по шагам смотреть, куда, что записывается и когда, что меняется,
или так

var stor = localStorage.getItem('activeFavoriteID');
console.log(stor);
var activeFavoriteID = JSON.parse(stor);
console.log(activeFavoriteID);

- ошибка появляется в тот момент, когда переходишь в товар из списка товаров. Как только загружается страница товара, то сразу в консоли появляется ошибка.

Спасибо,попробую предложенным вариантом :yes:

laimas 01.04.2020 15:32

Цитата:

Сообщение от _marisha
В настройках соединения на вкладке "Разрешения" необходимо установитьпараметр "Устанавливать куки = Разрешить"

Вообще-то по умолчанию они разрешены, а если запрещено, то FF не разрешит запись в хранилище, а у вас есть запись.

voraa 01.04.2020 16:07

Цитата:

Сообщение от _marisha (Сообщение 522064)
- ошибка появляется в тот момент, когда переходишь в товар из списка товаров. Как только загружается страница товара, то сразу в консоли появляется ошибка.

Спасибо,попробую предложенным вариантом :yes:

Как я понимаю, у вас есть страница Списка Товаров, где делается

localStorage.setItem('activeFavoriteID', JSON.stringify(activeFavoriteID));

Потом, в какой то момент производится переход на страницу Товаров, где делается

var activeFavoriteID = JSON.parse(localStorage.getItem('activeFavoriteID' ));

Но сам этот оператор не может вызвать ошибку. Если, что не так, он просто запишет null в activeFavoriteID и все.

Ошибка происходит где то в другом месте
Надо смотреть, где. В консоле же пишется в какой строке это происходит и весь стек вызовов посмотреть можно

_marisha 02.04.2020 05:33

Цитата:

Сообщение от laimas (Сообщение 522066)
Вообще-то по умолчанию они разрешены, а если запрещено, то FF не разрешит запись в хранилище, а у вас есть запись.

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

laimas 02.04.2020 06:28

У вас какая версия FF? У меня их две, последние 64-битные, различие, это одна версия для разработчиков. Версия для разработчиков отличается своим "поведением" в некоторых вопросах, то есть может разрешать то, что в обычной версии будет запрещено. Что же касается зависимости куки/хранилище, то обе будут запрещать запись в хранилище если запрещены куки.

В этих версиях в настройках нет такого управления куками как в прежних, они включены. Можно посмотреть список доменов, которые в настоящее время имеют куки, и можно установить запрет на их установку для определенных доменов.

_marisha 02.04.2020 07:42

Цитата:

Сообщение от laimas (Сообщение 522100)
У вас какая версия FF? У меня их две, последние 64-битные, различие, это одна версия для разработчиков. Версия для разработчиков отличается своим "поведением" в некоторых вопросах, то есть может разрешать то, что в обычной версии будет запрещено. Что же касается зависимости куки/хранилище, то обе будут запрещать запись в хранилище если запрещены куки.

В этих версиях в настройках нет такого управления куками как в прежних, они включены. Можно посмотреть список доменов, которые в настоящее время имеют куки, и можно установить запрет на их установку для определенных доменов.

- Стоят обычные версии FF 74.0 (64-битный) (т.е. одна FF на рабочем компе установлена, одна FF на домашнем ноуте).
Настройки в обоих браузерах одинаковые. Но вот на ноуте ошибок нет :blink: , в отличие от рабочего компа.
В версии для разработчика всё работает.

_marisha 02.04.2020 07:55

Произведена переустановка FF на рабочем компе - ошибок нет :blink:
Что это могло быть... даже представить трудно.

laimas 02.04.2020 08:09

Последняя версия Developer Edition, это версия 75.

_marisha 02.04.2020 08:14

Цитата:

Сообщение от laimas (Сообщение 522106)
Последняя версия Developer Edition, это версия 75.

- всё верно. В FF для разработчика всё работало.

Проблемы наблюдались в обычной версии FF 74.0 (64-битный). Причем на обоих компах установлена была одна и та же версия браузера, но только в браузере на рабочем компе ошибка возникала. Помогла переустановка FF


Часовой пояс GMT +3, время: 08:17.