gpt4 book ai didi

javascript - Safari 中看似不一致的 onstorage 触发

转载 作者:太空狗 更新时间:2023-10-29 15:18:06 26 4
gpt4 key购买 nike

我在 Safari 5.0(并非所有基于 WebKit 的浏览器)中遇到了以下问题,此代码:

<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>

将触发警报,以防我们单击按钮。虽然这段代码 -

<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>

触发的警报很少,正如预期的那样。我确实认为这是一个错误,但没有人能解释一下 - 为什么只交换两行代码会导致如此奇怪的行为?

最佳答案

没有错误(尽管像其他人评论的那样,我不会将事件处理程序命名为全局函数,其名称可能会造成混淆)。

问题在于 localStorage 的通知如何工作。本质上,事件仅针对使用相同 localStorage 的其他窗口(或选项卡)触发。

这是 a similar question and answer在 StackOverflow 上。

因此,在您的示例中,不会触发存储更改事件:处理程序在同一页面上。

关于javascript - Safari 中看似不一致的 onstorage 触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3799829/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com