Итак. Весь вчерашний день я провёл в гугле и на многих форумах. Читал много и долго. Приходилось даже ковырять английскую документацию, хотя я не знаю английского. Натыкался на различные комментарии пользователей сообществ, доходило до таких идей, как использование HTML5 History API, однако это не то. Это решало проблему с переходом по страницам не прекращая музыку, а не с её управлением из других вкладок. В общем на одном из форумов мне ответил добрый гик.
Сообщение от Александр Таратин
|
Коммуникацию между вкладками браузера можно организовать подписавшись на изменение данных localstorage и записывая нужные команды в него.
|
Погуглив
localStorage, нашёл одну его особенность, о которой упомянул тот гик:
localStorage кидает событие изменения, которое можно отловить. Само изменение никак не остановить, однако сообщения о нём вполне достаточно.
Хранилище
localStorage представляет собой ассоциативный массив из пары
ключ => значение
Сегодня повозился с двумя мануалами на разных сайтах и изменил свой JS-код до такого состояния:
{
var nowTime = new Date().getTime();
var PageSound = document.getElementById('PageSound');
localStorage['PageSound'] = nowTime;
PageSound.play();
}
function PageSoundStop()
{
PageSound.pause();
PageSound.currentTime = 0;
}
function onStorageEvent(storageEvent){
if(storageEvent.key == 'PageSound')
PageSoundStop();
}
$(document).ready(function()
{
if (window.addEventListener) {
window.addEventListener("storage", onStorageEvent, false);
} else {
window.attachEvent("onstorage", onStorageEvent);
};
PageSoundPlay();
});
Что я делаю? При открытии страницы я запускаю отслеживание событий хранилища, после этого запускаю воспроизведение музыки. Попутно определяю текущее Unix-время и записываю его в локальное хранилище в виде пары
PageSound и
nowTime:
localStorage['PageSound'] = nowTime;
Если я открою новую страницу, то переменная
PageSound получит новое значение, так как Unix-время не стоит на месте.
Старая страница получит сообщение об изменении события, и если ключ изменённого события равен
PageSound, то останавливаю воспроизведение
PageSound.pause();.
Таки образом это не является управление элементами другой вкладки. Просто создавалось такое впечатление, что я могу управлять элементами другой вкладке. На самом-то деле, это просто отслеживание изменения локального хранилища, и если оно где-то меняется, то, так как оно общее, другая страница может получить уведомление об этом, и запустить действия, задуманные кодером для определённых ситуаций.
Открыв контактовский скрипт
common.js с помощью поиска текста нашёл там отлов событий localStorage. Видимо так они и останавливают музыку в других вкладках. Я решил свою проблему, так что вопрос решён. Если мои поиски кому-нибудь пригодятся - я буду рад, что создание этого вопроса было не напрасным.
Всем спасибо, всем удачи. Если есть какие-то вопросы - пишите сюда, отвечу.
P.S.: правила не помню, регистрировался давненько, относительно. Память не оч у меня на такое, поэтому не помню, можно ли размещать ссылки на сторонние ресурсы. Искал сейчас правила по сайту - найти не смог. Если нельзя размещать левые ссылки, уж просите, скажите, и ткните носом в правила - ссылочки удалю. А пока выкладываю ссылки на мануалы.
Ссылки на мануалы:
Локальное хранилище на htmlbook.ru
Attaching a Storage Event Listener в теме HTML5 Local Storage