Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.04.2023, 09:13
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 778

Вопрос по onVisibilityChange
Привет.
const onVisibilityChange = () => {
    if (document.visibilityState === 'visible'){ 
        console.log('active')
    }else{            
        console.log('hiden')       
    }
}
document.addEventListener('visibilitychange', onVisibilityChange);


Почему при перезагрузки страницы она в состоянии 'hiden'? И можно ли как то это поправить?
Ответить с цитированием
  #2 (permalink)  
Старый 06.04.2023, 09:42
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,217

Сообщение от ureech
Почему при перезагрузки страницы она в состоянии 'hiden'?
Довольно странный вопрос...
Даже вопрос "Почему небо синее" звучит более научно.

Ответ будет такой - это так работает.

Сообщение от ureech
И можно ли как то это поправить?
Если только написать свой браузер...
Ответить с цитированием
  #3 (permalink)  
Старый 06.04.2023, 09:50
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 778

Возможно для такого просвещённого как вы, вопрос действительно странный, но я не вижу в этом странности). Рассуждая логически, если страница видна, то должен быть не hiden. Отсюда был и вопрос. Но видимо в программировании не всегда работает логика))). Тогда с другой стороны. Можно ли заставить работать это событие только после окончания перезагрузки? Что то типа этого
const pageAccessedByReload = (
    (window.performance.navigation && window.performance.navigation.type === 1) ||
      window.performance
        .getEntriesByType('navigation')
        .map((nav) => nav.type)
        .includes('reload')
  );

  if(pageAccessedByReload==true){
    window.location.hash='reload'
  }else{

  }
  document.addEventListener("DOMContentLoaded", function(event) { 
    if(window.location.hash=='#reload'){
        document.addEventListener('visibilitychange', onVisibilityChange);
    } 
  })


Но так не работает)
Ответить с цитированием
  #4 (permalink)  
Старый 06.04.2023, 10:37
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 778

Для меня решение, это использовать $(window).focus() оно не реагирует на перезагрузку страницы.
Ответить с цитированием
  #5 (permalink)  
Старый 06.04.2023, 10:59
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,745

Сообщение от ureech
Рассуждая логически, если страница видна, то должен быть не hiden.
Нет. На короткое время страница становится невидимой. Она выгружается, все ресурсы освобождаются, и загружается заново. Часто при новой загрузке она берется из кеша в оперативной памяти, без обращения к серверу, поэтому это очень быстро. Но это не отменяет факт, что старая версия страницы выгружается и становится невидимой.
Ответить с цитированием
  #6 (permalink)  
Старый 06.04.2023, 11:46
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,745

Сообщение от ureech
window.location.hash='reload'
Установка только якоря не вызывает перезагрузку страницы, а только скроллинг к этому якорю, если он есть.
Ответить с цитированием
  #7 (permalink)  
Старый 06.04.2023, 14:40
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 778

Ааа, вот теперь понятно. Большое спасибо). Тогда почему не работает такой вариант?
document.addEventListener('visibilitychange', function() {
    console.log(this.visibilityState);
    if(this.visibilityState =='visible'){
        foo(true); 
    }else{
        foo(false); 
    }
  }, false);


function foo(param){
if(!param)return false;
console.log('true')
}
Ответить с цитированием
  #8 (permalink)  
Старый 06.04.2023, 17:09
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,745

В каком смысле не работает? Чего он не делает из того, что должен бы был делать?
Ответить с цитированием
  #9 (permalink)  
Старый 06.04.2023, 18:10
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 778

Разобрался. Спасибо).
Ответить с цитированием
  #10 (permalink)  
Старый 07.04.2023, 09:44
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,217

Сообщение от ureech
Но видимо в программировании не всегда работает логика))).
Твоя логика.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вопрос про возможности JS для рисования и анимации macdack Библиотеки/Тулкиты/Фреймворки 3 15.07.2011 00:13
Я как ответить на вопрос - есть ли жизнь на других планетах? TicTac Оффтопик 5 28.04.2011 04:29
Вопрос авторизации. 0931454574 Серверные языки и технологии 8 12.04.2011 11:09
Вопрос на миллион. Ajax и идентификация по адресной строке. 0931454574 AJAX и COMET 5 31.03.2011 11:54
Вопрос по замыканиям Goodfella Общие вопросы Javascript 20 09.03.2011 01:21