браузер iPhone Safari, измените # хеш-URL, а затем окно предупреждения Javascript перестанет работать

Я запускаю веб-страницу в iPhone Safari. На странице есть кнопка. при нажатии на нее появится окно с сообщением о предупреждении. Хорошо. Затем я изменяю или добавляю # хэш-URL , набирая в адресной строке, затем окно с предупреждением перестает работать. Я нажимаю на кнопку, и ничего не происходит. Нет ошибки JavaScript, но нет окна с предупреждением.

video recording of the issue

Это известная проблема iOS Safari?

Пожалуйста, поделитесь своими мыслями и решением, которое вы придумали. Большое спасибо!

$(".button").click(function () {
  alert('Hello');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script>
<input class="button" type="button" value="alert" />

Ответ 1

Никогда не использовал # внутри URL, кроме как для ссылки на якорь, но я не уверен на 100% в этом... Я думаю, что добавление # к URL и нажатие клавиши Enter не перезагрузит страницу. #abc в URL- #abc браузеру переходить на якорь с именем abc поэтому он никогда не перезагрузит страницу и не вызовет какой-либо javascript. Если вы не хотите переходить/прокручивать к какой-либо привязке к вашей реальной странице, не используйте # в URL. Это должно решить вашу проблему.

Ответ 2

# В URL-адресе является идентификатором фрагмента. Ожидается, что что-то будет после URL-примера: www.yourpage.com/foo.html#bar. Это оставляет его в поисках фрагмента бара на вашей странице. Страница не будет перезагружена.

Это может помочь фрагментам w3

Ответ 3

Ну, это может быть связано с тем, что вы не делаете еще один http request и вместо этого указываете браузеру перейти к указанному хешу (пример) #abc.

Если бы у вас был элемент такого рода с этим идентификатором, он перешел бы в этот раздел страницы.

Пример:

<a href="#abc">click to jump down to my section</a>

<p id="abc">my section</p>

Я предполагаю, что когда вы введете #abc в URL, он будет искать это. Которого там нет, конечно.

Кроме этого, я не совсем уверен.

Ответ 4

Может быть связано с предупреждением, подтверждением и запросом, не работающим после использования History API в Safari, iOS и https://forums.developer.apple.com/thread/65054.

Кажется, что alert() становится undefined. Предлагаемый обходной путь - использовать вместо этого пользовательские всплывающие окна.