mir das folgende Problem in der Safari 5.0 (nicht in allen WebKit-basierten Browsern) begegnet ist, dieser Code:Scheinbar im Widerspruch onstorage in Safari auslösenden
<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>
auf Alarm auslösen, in Fall klicken wir auf den Knopf. Während dieser Code -
<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>
löst einige Warnungen, da nicht zu erwarten. Ich denke, das ist ein Fehler, aber kann mir nicht jemand erklären - warum nur zwei Zeilen Code zu einem so seltsamen Verhalten führt?
Dunno, 'onstorage' funktioniert nicht für mich. Im Allgemeinen sollten Sie jedoch vermeiden, die globalen Variablen/Funktionen 'onstorage' oder' onclick' zu nennen. Da 'onclick' als' window.onclick' zugänglich ist, wird es Click Events für 'window' auch ohne' addEventHandler' erhalten! – bobince
bobince, dumme mich))) Sie haben völlig Recht - es gibt einige Probleme mit onclick Variable im globalen Umfang. Dennoch ist es ein Fehler, aber weniger rätselhaft) – shabunc
Wie ist es ein Fehler, wenn Sie versuchen, reservierte globale Methodennamen zu verwenden? – rxgx