Я столкнулся с этой же проблемой. Вот что сработало для меня. (Примечание: я работаю в контексте Modernizr и jQuery)
Сначала я добавляю собственный класс Modernizr, используя API плагина ModernTr addTest для тестирования на iOS, который добавит класс appleios
или no-appleios
соответственно.
Поскольку в моем исследовании body
, кажется, запускает события в своей собственной повестке дня, я принимаю небольшую предосторожность, оборачивая все содержимое документа элементом в контексте iOS. Затем я добавляю обработчик событий к этому элементу.
$(".appleios body").wrapInner('<div id="appleios-helper" />');
$("#appleios-helper").bind("mouseup", function(){return;});
То, что было предложено ранее в этой теме, использует void(0)
. Я провел небольшое быстрое тестирование и обнаружил, что void(0)
, поскольку событие просто не вызывает распознавания прикосновений к телу. Когда я подключил свою собственную «пустую» функцию в виде function(){return;}
все заработало.
Все это зависит от того факта, что в Mobile Safari не запускаются никакие события, если только у элемента нет явных событий для запуска ( Руководство по веб-контенту Safari .) При вставке этого пустого события в оболочку все будет пузыриться до тела.
Если вы используете простой JavaScript без какой-либо из этих библиотек, тот же эффект может быть достигнут в разметке HTML
<html>
...
<body>
<div id="appleios-helper" onmouseup="function(){return;}">
...
</div>
</body>
</html>
Это помогло мне скрыть всплывающие подсказки при касании в любом месте тела документа. Ваш пробег может варьироваться.