Есть в проекте 2 случая, когда происходит общение между вкладками или окнами.
1 случай: на сайте имеется айфрейм. Этот айфрейм запрашивает у родительского окна некоторую информацию, которую сам получить не может. Запрашивает postMessage'м и ответ тоже получает postMessage'м.
2 случай: механизм, который шарит sessionStorage между вкладками. Идея состоит в том, что новая вкладка отправляет запрос на получение данных сессии, эмитируя в других вкладках событие onstorage, а другие вкладки отправляют нужные данные.
Оба сценария хорошо работают, но так как в postMessage и onstorage не предусмотрено получение ответа, то все делается с помощью setTimeout с потолка.
Грубо говоря вот так:
//Устанавливаем обработчик postMessage'a
window.addEventListener('message', e => {
if (e === 'setReferrer') {
//...
}
});
//Отправляем запрос в родительский фрейм
parent.postMessage('getReferrer', '*');
setTimeout(() => {
//Выполняем скрипт через 200мс, надеясь, что referrer уже пришел.
}, 200);
Вот эти 200мс меня смущают. Понятно, что общение происходит тут, локально между окнами. Но может ли что-то увеличить задержку?