200 • Глава 6
function popupPlayer() {
if (!localStorage.playerOpen) {
// сведено к "true", но когда окно закроется,
// мы удалим значение.
localStorage.playerOpen = true;
// открыть всплывающее окно
}
}
function play(song) {
localStorage.currentlyPlaying = song.title;
// запускается и воспроизводит песню в каком-то квази-DRM
¬ потоковом режиме
}
function stop() {
// когда песня заканчивается, или когда пользователь
¬ останавливает музыку вручную,
// содержимое всплывающего проигрывателя также должно обновляться
localStorage.removeItem('currentPlaying');
}
В то же время в коде всплывающего окна, помимо воспроизведения аудиопотока нужно
также прослушивать событие хранилища, сообщающее, что значение
currentPlaying
по-
менялось. Тогда можно запускать новую веселую песню:
function handleStorage(event) {
event = event || window.event; // для поддержки IE8
if (event.newValue === null) { // событие удалено
stopPlaying();
} else {
// начать воспроизведение и обновить информацию
startPlaying(event.newValue);
}
}
window.addEventListener('storage', handleStorage, false);
window.attachEvent('storage', handleStorage);
Очевидно, что существуют и другие ситуации применения данной функциональности,
помимо сайта радио. Запомните только, что события хранилища позволяют отдельным
окнам в одном домене обмениваться данными — в старые времена для реализации такой
возможности вам пришлось бы немало потрудиться.