Определить, активна ли вкладка? (отличается от фокуса)

#javascript #safari #dom-events

#javascript #safari #dom-события

Вопрос:

Мой Javascript использует таймер для обновления CSS страницы. Мне нравится запускать его, когда Safari работает в фоновом режиме, и я вношу изменения в свой редактор кода, но я не хочу, чтобы он запускался, когда его нет на активной вкладке браузера.

window.blur и window.focus срабатывают, когда другая вкладка находится в фокусе, но они также срабатывают, когда вкладка активна, а Safari работает в фоновом режиме, поэтому они мне здесь не помогают.

Как мне определить, активна ли в данный момент вкладка, на которой запущен мой Javascript?

Ответ №1:

У W3C есть рабочий проект для отслеживания именно этой ситуации: API видимости страницы. Похоже, Chrome — единственный браузер, который его поддерживает, в настоящее время с экспериментальным API. Вы можете попробовать это с помощью этой небольшой функции в консоли веб-инспектора:

 function tattle() {
  console.log(document.webkitVisibilityState);
}

document.addEventListener("webkitvisibilitychange", tattle, false);
 

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

Комментарии:

1. прочитав страницу Chrome, на которую ссылается ссылка, я думаю, что обнаружил ошибку. в нем указано, что <q> document.webkitHidden Возвращает true, если страница находится в состоянии, которое считается скрытым для пользователя, и false в противном случае. <q>. в этом ответе говорится, что это верно, если документ является активной вкладкой в его окне, тогда как на самом деле это было бы ложью.

Ответ №2:

Здесь есть некоторая документация: https://developer.apple.com/documentation/safariextensions

Комментарии:

1. Они доступны только для расширений Safari

Ответ №3:

попробуйте что-то вроде onmouseover..