none
localStorage.onstorage: проблема/баг IE9 RRS feed

  • Общие обсуждения

  • В доках написано что при изменениях в localstorage возникает событие onstorage Создал пример из 2 страниц: главная - подписывается на onstorage и имеет кнопки для открытия дочерних окон и записи в localStorage. Дочерние окна - имеют кнопки записи данных в localStorage и кнопку открытия своего дочернего окна Проблема/баг вот в чем - во всех открытых окнах событие срабатывает нормально акромя главного - в нем тишина Во всех остальных браузерах - в главном окне также генерируется событие onstorage

    Главная страница
    --------------------
    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> </head> <body> <script type="text/javascript"> function openwindows(n) { var h = window.screen.height / n, w = window.screen.width / n, i, j; for (i = 0; i < n; i += 1) { for (j = 0; j < n; j += 1) { window.open('1.htm', '_blank', "width=" + (w - 10) + ",height=" + (h - 60) + ",resizable=yes,scrollbars=no,status=no,left=" + (i * w) + ",top=" + (j * h)); } } } function openwindow() { var h = window.screen.height, w = window.screen.width; window.open('1.htm', '_blank', "width=200,height=200,resizable=yes,scrollbars=no,status=no,left=" + (~ ~(Math.random() * w)) + ",top=" + (~ ~(Math.random() * h))); } function onStorage() { var cmd = localStorage.getItem('command'); if (cmd.match(/close/)) { window.close(); } else { document.body.style.backgroundColor = 'rgb(' + ~ ~(cmd * 255) + ',' + ~ ~(cmd * 255) + ',' + ~ ~(cmd * 255) + ')'; document.body.style.color = 'rgb(' + ~ ~(Math.random() * 255) + ',' + ~ ~(Math.random() * 255) + ',' + ~ ~(Math.random() * 255) + ')'; } } var webkit = !!navigator.userAgent.match(/AppleWebKit\/(\d+\.\d+)/); if (window.addEventListener) { window.addEventListener("storage", onStorage, false); } else { window.attachEvent("onstorage", onStorage); }; function broadcast(cmd) { localStorage.setItem('command', cmd); onStorage(); } </script> <button onclick="openwindow();"> Open 1 window</button> <button onclick="openwindows(4);"> Open 16 windows</button> <button onclick="openwindows(5);"> Open 25 windows</button> <button onclick="broadcast(Math.random());"> Broadcast</button> </body> </html>


    Дочернее окно - 1.htm
    ---------------------------
    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Broadcast target</title> </head> <body> <script type="text/javascript"> function onStorage() { var cmd = localStorage.getItem('command'); document.getElementById("result").innerHTML = cmd; if (cmd.match(/close/)) { window.close(); } else { document.body.style.backgroundColor = 'rgb(' + ~ ~(cmd * 255) + ',' + ~ ~(cmd * 255) + ',' + ~ ~(cmd * 255) + ')'; document.body.style.color = 'rgb(' + ~ ~(Math.random() * 255) + ',' + ~ ~(Math.random() * 255) + ',' + ~ ~(Math.random() * 255) + ')'; } } var webkit = !!navigator.userAgent.match(/AppleWebKit\/(\d+\.\d+)/); if (window.addEventListener) { window.addEventListener("storage", onStorage, false); } else { window.attachEvent("onstorage", onStorage); }; function openwindow() { var h = window.screen.height, w = window.screen.width; window.open('1.htm', '_blank', "width=200,height=200,resizable=yes,scrollbars=no,status=no,left=" + (~ ~(Math.random() * w)) + ",top=" + (~ ~(Math.random() * h))); } function broadcast(cmd) { localStorage.setItem('command', cmd); onStorage(); } </script> <button onclick="broadcast(Math.random());"> Broadcast</button> <button onclick="broadcast('close-'+Math.random());"> Close all</button> <button onclick="openwindow();"> Open Window</button>
    
    </body> </html>
    31 марта 2011 г. 19:05

Все ответы

  • А какая версия IE9 у Вас установлена - финальная, или бета?
    Don't forget to vote for useful replies and/or mark answers for your questions - that helps other guys to find the answer faster.
    28 апреля 2011 г. 20:23
  • Уважаемый пользователь!

    В вашей теме отсутствует активность в течение последних 5 дней. При отсутствии каких-либо действий в течение 2 последующих дней, тема будет переведена в разряд обсуждений. Вы можете возобновить дискуссию, просто оставив сообщение в данной теме


    Для связи [mail]
    Модератор