Я занимаюсь разработкой гибридного (веб + родного) приложения для iOS. Веб-часть приложения представляет собой SPA в WKWebView (который находится в UINavigationController). На сайте есть элемент <select>
с обработчиком onchange
/ onblur
. Когда пользователь касается элемента <select>
, появляется собственное колесо выбора. Затем, когда пользователь нажимает кнопку «Готово» собственного средства выбора, обработчики onchange
и onblur
запускаются немедленно. Это все работает, как ожидалось.
Поскольку это гибридное приложение, бывают случаи, когда приложение помещает контроллер представления в UINavigationController (поверх веб-представления). Когда этот контроллер представления отключен и фокус возвращается к веб-представлению, кажется, что все работает так, как раньше.
Однако элементы <select>
теперь будут запускать события onchange
и onblur
только тогда, когда пользователь нажимает на расстоянии от элемента. Если пользователь обновляет свой выбор и нажимает Готово, средство выбора будет отклонено, но значение элемента выбора останется неизменным. Только после нажатия за пределами элемента значение будет обновлено и события onchange
/ onblur
сработают.
Неважно, когда новый контроллер представления помещается и выталкивается, даже если это происходит до того, как элемент <select>
был создан. Если в какой-либо момент в течение жизненного цикла веб-представления оно закрывается новым контроллером представления, эта ошибка будет возникать 100% времени, пока веб-представление не будет уничтожено.
Пример кода (здесь нет ничего особенного):
HTML:
<select id="mySelect">
<option value="A">A</option>
<option value="B">B</option>
<option value="C">C</option>
</select>
JS:
document.getElementById("mySelect").onchange = function() {
console.log("hello");
}
Эта проблема возникает только для iOS 11 и 12. Это ошибка, специфичная для Mobile Safari? Любая помощь будет высоко ценится.