Определите, касался ли Apple карандаш или палец в веб-обзоре (реагировать на родной язык)

В сафари мобильных телефонах штрихи можно классифицировать как Apple Pencil vs other (finger/mouse), используя:

event.touches[0].touchType === 'stylus' //pencil
event.touches[0].touchType !== 'stylus' //other

Однако все события, полученные в ответном собственном веб-просмотре (как для Apple Pencil, так и при использовании пальца), получают:

touchType === 'direct' //inside webview, both pencil and other

Как я могу обнаружить прикосновение с Apple Pencil в веб-обзоре?

Очевидно, event.touches[0] > 0 - еще одна возможность, но для обоих типов в webview также устанавливается значение 0.

(Не уверен, что это проблема с реагированием на родное или встроенное ограничение веб-просмотров).

Связанные с:

Ответы

Ответ 1

Я решил эту проблему, заменив компонент React Native WebView компонентом WKWebView с https://github.com/CRAlpha/react-native-wkwebview

т.е. Заменить import { WebView } from 'react-native' с import WKWebView from 'react-native-wkwebview-reborn'

Это потребовало различных модификаций и обходных решений, но в конечном итоге было успешным, и теперь события включают дополнительные параметры, такие как:

  • touchType
  • сила
  • altitudeAngle
  • azimuthAngle

Похоже, что более старый WebView может не поддерживать дополнительные параметры событий, связанные с Pencil/Stylus (но также возможно, что я использовал неправильную/старую версию или, возможно, React Native не передал их через собственный компонент WebView. с удовольствием обновляем более подробно, если кто-нибудь может уточнить).

Ответ 2

Если вы посмотрите дату выхода iOS 8

17 сентября 2014 года

Дата выпуска карандаша Apple

11 ноября 2015 года

Дата выхода сенсорной версии Apple

9 сентября 2014 г.

Теперь, если вы посмотрите на нижнюю статью из яблока

https://developer.apple.com/documentation/webkit/wkwebview

Важный

Начиная с iOS 8.0 и OS X 10.10, используйте WKWebView для добавления веб-контента в ваше приложение. Не используйте UIWebView или WebView.

Таким образом, возможно, WKWebView поддерживает поддержку этих вещей по сравнению с UIWebView. Но это не может быть подтверждено без экспериментов, поскольку документация с четкими различиями между ними отсутствует

Было огромное обсуждение использования WKWebView по умолчанию на iOS8+ для реакции native. Вы можете найти то же самое ниже

https://github.com/facebook/react-native/issues/321

Вы можете увидеть комментарий от компонента поддержки компонента WKWebView

Сопровождайте реакцию-native-wkwebview здесь. Я согласен с тем, что для этого репо есть ограниченные преимущества, которые могут быть объединены в ядро, одна из которых - поддержка Экспо (Expo по-прежнему использует UIWebView). Но я думаю, что это скорее проблема для Экспо, а не React Native.

ИМО, React Native должен сосредоточиться на "основных" мостах, и этот компонент должен радостно жить как сторонний компонент. Это облегчает людям возможность внести свой вклад в этот проект. Кроме того, это означает гибкий график выпуска (в отличие от ежемесячного расписания релиза React Native)

И я согласен с @brunolemos в том, что совершенствование React Native docs - лучший способ сделать людей более осведомленными о решении относительно UIWebView и WKWebView и указать их на решение.

Поэтому я думаю, что возможно, что WKWebView имеет больше возможностей в событиях, чем устаревший UIWebView. Но, к сожалению, после долгих разрывов я не мог найти такой официальной информации. Я бы добавил дополнительную информацию, если бы у меня был iPhone/iPad, с которым я мог бы экспериментировать.

Я пробовал с симулятором, и я получаю следующие поля в событиях для UIWebView и WKWebView

WKWebView

Event

UIWebView

UIWevView

В JSFiddle я использовал

https://jsfiddle.net/J4djY/166/

Но поскольку у меня нет физического устройства, я не могу подтвердить некоторые из наблюдений