2012-05-23 1 views
2

Хорошо, я нашел кучу ответов о родных функциях, таких как window.onblur и window.onfocus ... Но они не поможет, так что я хотел бы быть более конкретнымВоспроизведение звука только в одном окне, в котором активен (на одном веб-сайте) с использованием javascript (возможно, jquery)

  1. Допустим, вы открыть несколько вкладок одного сайта
  2. Допустим, вы получите сообщение и есть звук, чтобы объявить сообщение
  3. Как у вас есть несколько открытые вкладки, вы услышите звук количества открытых вкладок. Что делает how'd'u'callit симфонию

Лучшие решения я нашел до сих пор, но не работают 1. window.onfocus и window.onblur 2. Воспроизведение звука, если вар InFocus истинно, не играть, если не 3. это броузеры 4. это просто 5. Она не работает

Почему лучшее решение не будет работать? Скажем, вы переключаете фокус на другую вкладку другого веб-сайта, ваш сайт теряет фокус, поэтому вы не услышите звук. Еще хуже, скажем, вы переключитесь на другую программу, затем браузер теряет фокус, и вы не услышите звук

Итак, что мне делать?

ответ

0

Хорошо, через две недели после того, как кажется, что я нашел реальное решение. Что на самом деле доказывает, что если вы хотите что-то сделать, не просят о помощи, просто сделать это

Это то, что я сделал:

  1. Создать печенье с RANDON ид и текущее время (winid + t1). Файл cookie создается каждой открытой вкладкой при загрузке. document.cookie = 'winid =' + winid + t1;

  2. Создайте функцию, которая будет обновлять текущее время в установленном файле cookie, скажем, каждые 3 секунды (я не люблю переполнять клиентов, поэтому это 3 секунды, а не 1). Если функция узнает, что winid в файле cookie и winid текущей вкладки не совпадают, и прошло 3 секунды, вкладка была закрыта, переопределите основную вкладку внутри той же функции. окно.setInterval (setwinid, 3000);

  3. Это его, каждый раз, когда вам нужно, скажем, воспроизведение звука, вы должны проверить в первую очередь, является ли это вкладка, которая будет играть его

Хитрость заключается в том, что каждая вкладка имеет свой собственный winid. Но только один winid хранится в cookie, обновляется и, таким образом, позволяет одной вкладке выполнять действия. Довольно просто. Я действительно начал использовать этот метод для обновления сообщений в поле на всех вкладках не только для воспроизведения музыки.

0

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

Добавить флаг в базу данных, которая означает, что сообщение отправлено. Установите флаг при первом запросе браузером пользователя для новых сообщений. На самой странице воспроизводить звук можно только в том случае, если флаг не установлен, иначе звук не воспроизводится. Теперь воспроизводится только первая страница, которая извлекает сообщение.

+0

Ну, на самом деле серверное решение также не очень хорошо. Если пользователь входит в систему и видит новые сообщения, но предпочитает игнорировать их какое-то время. В этом случае звук будет воспроизводиться ... но он НИКОГДА не будет воспроизводиться снова, когда пользователь будет входить в следующий раз, НО СООБЩЕНИЯ НЕ ДОЛЖНЫ ПРОЧИТАТЬ. Флаг на стороне сервера фактически заставит их читать ... в то время как они отсутствуют, вы видите – Otvazhnii

+0

Вы можете очистить флаг по истечении заданного периода времени или во время выхода пользователя из системы. Вы можете иметь отдельные флаги для чтения и уведомления. – JJJ

1

Вы можете сохранить временную метку последнего события onFocus() в переменной JavaScript и в файле cookie (доступ к вашему корню веб-сайта). Затем, когда вы хотите воспроизвести звуковой сигнал, вы сравниваете текущие значения переменной и файла cookie и воспроизводите только звук, если эти два совпадают.

Смежные вопросы