Как определить, что выбрана вкладка браузера и выполнить код в JavaScript? - PullRequest
0 голосов
/ 19 февраля 2020

Я хочу открыть одну и ту же страницу на нескольких вкладках браузера. Когда я нажимаю на ОДНУ вкладку браузера, я хочу, чтобы функция JavaScript выполнялась ОДИН РАЗ, всего один раз! Не то чтобы эта функция выполнялась 3 раза, потому что одна и та же страница открывается, например, на 3 вкладках браузера.

Я пробовал:

window.addEventListener("focus", () => {
     console.log(document.hasFocus());
});

Это прекрасно работает, если курсор находится в фокусе в веб-браузере и продолжает переключаться между вкладками в этом браузере.

Но если вы сначала сфокусируете свой курсор на чем-то ином, чем этот веб-браузер (например, на рабочем столе компьютера или в коде IDE), а затем нажмете кнопку NON- Вкладка ACTIVE в браузере, приведенный выше код будет выполнен два раза, один раз для предыдущей активной вкладки, а другой раз для новой активной вкладки, на которую вы только что нажали.

В этом моя проблема.

Как я могу выполнить код JavaScript только один раз, когда я нажимаю на вкладку веб-браузера? Любое решение, кроме кода JavaScript, также приветствуется, например, отслеживание пикселей или событие автофокуса поля ввода, просто для именования сэмплов. Я не имел в виду, что методы отслеживания пикселей помогут. Я не использую jQuery. Я использую VueJs.

1 Ответ

0 голосов
/ 19 февраля 2020

Возможно, вы захотите использовать этот древний метод и синтаксис JS, прежде чем принять его в качестве окончательного стиля кодирования. Имейте немного классического c ванильного аромата. Это никогда не ранит.

document.body.onfocus = function(e){console.info(e.type)}
should work exactly as requested...
but since this behavior is somewhat tied to the BOM, some browser vendors (with idiosyncratic behaviors) might require some sort of enforced filtering,  Opera comes to mind. 

But it should be rock solid on all modern browsers including a bonus backward compatibility, as back as Windows 98 browser version. And\or the ancient and now probably forgoten NN 4.7. ( except for the console info event log, but that's not needed for the actual use anyway )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...