que he encontrado el problema siguiente en el Safari 5.0 (no en todos los navegadores basados en WebKit), este código:onstorage aparentemente incompatibles desencadenar en Safari
<html>
<script>
var onstorage = function(evt) {
alert([evt.key, evt.oldValue, evt.newValue].join('\n'));
}
var onclick = function(evt) {
localStorage.setItem('test', Math.random());
}
var oninit = function() {
//actually, it works the same way with old "plain event" onclick
document.querySelector('#test').addEventListener('click', onclick, false);
window.addEventListener('storage', onstorage, false);
}
</script>
<body onload="oninit()">
<input id="test" type="button" value="setting a random value"/>
</body>
activará en estado de alerta, en caso de que haga clic en el botón. Si bien este código -
<html>
<script>
var onstorage = function(evt) {
alert([evt.key, evt.oldValue, evt.newValue].join('\n'));
}
var onclick = function(evt) {
localStorage.setItem('test', Math.random());
}
var oninit = function() {
window.addEventListener('storage', onstorage, false);
//actually, it works the same way with old "plain event" onclick
document.querySelector('#test').addEventListener('click', onclick, false);
}
</script>
<body onload="oninit()">
<input id="test" type="button" value="setting a random value"/>
</body>
desencadena unos alerta, ya que no se esperaba. Creo que esto es un error, pero ¿alguien puede explicarme por qué cambiar dos líneas de códigos resulta en un comportamiento tan extraño?
Dunno, 'onstorage' no funciona para mí. Pero, en general, debe evitar llamar variables globales/funciones 'onstorage' o' onclick'. Debido a que 'onclick' es accesible como' window.onclick', ¡recibirá los eventos click para 'window' incluso sin' addEventHandler'! – bobince
bobince, tonto yo))) tienes toda la razón: hay algunos problemas con la variable onclick en el alcance global. No obstante, es un error, pero menos enigmático) – shabunc
¿Cómo es un error cuando intentas usar nombres de métodos globales reservados? – rxgx