首页 > 解决方案 > Safari 没有正确设置 JavaScript 变量

问题描述

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

问题

在 SafaridoThisOnlyOnce()上,每次点击都会运行。MyNamespace.firstUserGesture根本没有设置为false

正如预期的那样,在任何其他浏览器doThisOnlyOnce()上仅在第一次单击时运行。

我错过了什么?

标签: javascripthtmlsafari

解决方案


使用 Safari JS 调试器逐行检查代码表明doThisOnlyOnce函数语句之一引发了异常。消除异常原因,也消除了这种奇怪的行为。


推荐阅读