【发布时间】:2021-12-22 09:56:50
【问题描述】:
我使用的是 Safari 12.0.3。我有:
function doThisOnlyOnce() {
if (MyNamespace.firstUserGesture) {
console.log('Do stuff only once!')
}
MyNamespace.firstUserGesture = false
}
function init() {
window.MyNamespace = {} // Easy access to some vars.
MyNamespace.firstUserGesture = true
MyNamespace.vid = document.getElementById("vid")
MyNamespace.vid.addEventListener('click', doThisOnlyOnce)
}
<body onload="init()">
<div id="vid">x</div>
</body>
问题
在 Safari 上,doThisOnlyOnce() 在每次点击时运行。 MyNamespace.firstUserGesture 根本没有设置为 false。
在任何其他浏览器上,doThisOnlyOnce() 仅在第一次点击时运行,正如预期的那样。
我错过了什么?
【问题讨论】:
-
Mac OS Safari 还是 iOS Safari? (或两者兼而有之?)
-
@T.J.Crowder 抱歉,我删除了 mobile-safari 标签。我现在只能确认桌面 Safari :)
-
@T.J.Crowder 这很奇怪。但是在这篇 StackOverflow 帖子中,当我使用相同的 Safari
12浏览器运行代码 sn-p 时,该函数只运行一次!我很困惑:( -
@user3405291 很明显,您的本地代码在某些方面与您在 SO 上发布的代码不同
-
Safari 似乎不太可能以如此根本的方式被破坏,这表明还有更多的事情发生。例如,如果您有无效的 HTML 标记(将
p元素放入span元素中,诸如此类),不同浏览器在构建 DOM 时“修复”它的方式在浏览器供应商之间并不总是 100% 一致。我怀疑这就是这里发生的事情。在 Safari 上,我建议右键单击vid元素并选择“检查”(或在 Safari 上调用的任何内容)来查看 实际 DOM(不是查看源代码)。听起来点击正在重新加载页面。
标签: javascript html safari