ho incontrato il seguente problema in Safari 5.0 (non in tutti i browser basati su WebKit), questo codice:onstorage Apparentemente incoerente innescando in 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>
attiveranno in allerta, in caso facciamo clic sul pulsante. Mentre questo codice -
<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>
innesca alcuni avvisi, in quanto non previsto. Penso che questo sia un bug, ma qualcuno non può spiegarmi: perché scambiare solo due righe di codice risulta in un comportamento così strano?
Dunno, 'onstorage' non funziona per me. Ma in generale dovresti evitare di chiamare variabili globali/funzioni 'onstorage' o' onclick'. Poiché 'onclick' è accessibile come' window.onclick', riceverà gli eventi click per 'window' anche senza' addEventHandler'! – bobince
bobince, stupido me))) hai perfettamente ragione - ci sono alcuni problemi con la variabile onclick nell'ambito globale. Tuttavia, si tratta di un bug, ma meno enigmatico) – shabunc
Come si presenta un bug quando si tenta di utilizzare nomi di metodi globali riservati? – rxgx