#javascript #html #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) }
lt;body onload="init()"gt; lt;div id="vid"gt;xlt;/divgt; lt;/bodygt;
Проблема
В Safari doThisOnlyOnce()
запускается при каждом щелчке мыши. MyNamespace.firstUserGesture
не установлено false
вообще.
В любом другом браузере doThisOnlyOnce()
запускается только при первом щелчке, как и ожидалось.
Что я упускаю?
Комментарии:
1. Сафари на Mac OS или сафари на iOS? (Или и то, и другое?)
2. @Ти Джей Краудер Извините, я удалил тег мобильного сафари . На данный момент я могу подтвердить только для рабочего стола Safari 🙂
3. @Ти Джей Краудер, это очень странно. Но здесь, в этом посте StackOverflow, когда я запускаю фрагмент кода в том же
12
браузере Safari, функция запускается только один раз! Я в замешательстве 🙁4. @user3405291 Очевидно, что ваш локальный код каким-то образом отличается от кода, который вы опубликовали здесь, так что
5. Кажется исключительно маловероятным, что Safari нарушен таким фундаментальным образом, что говорит о том, что происходит нечто большее. Например, если у вас неверная HTML-разметка (размещение
p
элементов внутриspan
элементов и тому подобное), способы, которыми разные браузеры «исправляют» ее при создании DOM, не всегда на 100% согласованы между поставщиками браузеров. Я подозреваю, что именно это здесь и происходит. В Safari я предлагаю щелкнуть правой кнопкой мышиvid
элемент и выбрать «Проверить» (или как там это называется в Safari), чтобы просмотреть фактический DOM (а не источник просмотра). Похоже, что щелчок перезагружает страницу.
Ответ №1:
Просмотр кода построчно с помощью отладчика Safari JS указывает на то, что один из операторов doThisOnlyOnce
функции создавал исключение. Удаление причины исключения также устранило это странное поведение.
Комментарии:
1. По какой-то причине другие браузеры НЕ выдают это исключение.