2016-12-24 5 views
0

У меня есть библиотека sysend.js, которая позволяет отправлять сообщения на другие вкладки/окна с использованием события хранения. Бу в IE событие запускается также на той же странице, где используется setItem. Есть ли способ обнаружить в IE, если событие хранилища запущено на той же или другой странице?Как определить, произошло ли событие хранения localStorage с той же страницы в IE?

Мой код для события хранения выглядеть следующим образом:

var uniq_prefix = '___sysend___'; 
function get(key) { 
    return localStorage.getItem(uniq_prefix + key); 
} 
var callbacks = {}; 
window.addEventListener('storage', function(e) { 
    // get user key 
    var key = e.key.replace(new RegExp('^' + uniq_prefix), ''); 
    if (callbacks[key]) { 
     var obj = JSON.parse(get(key)); 
     if (obj) { 
      // don't call on remove 
      callbacks[key].forEach(function(fn) { 
       fn(obj[1], key); 
      }); 
     } 
    } 
}, false); 

данные в LocalStorage является массив с идентификатором в качестве первого элемента и фактических данных в качестве второго пункта.

ответ

0

Вы можете проверить, если URL событие отличается, то location.href:

window.addEventListener('storage', function(e) { 
    if (e.url != location.href) { 
     var key = e.key.replace(re, ''); 
     if (callbacks[key]) { 
      var value = e.newValue || get(key); 
      if (value != random_value) { 
       var obj = JSON.parse(value); 
       if (obj) { 
        // don't call on remove 
        callbacks[key].forEach(function(fn) { 
         fn(obj[1], key); 
        }); 
       } 
      } 
     } 
    } 
}, false); 

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

  • Нет связанных вопросов^_^