WKWebview позволяет LinkPreview к ложному прерыванию выделения текста - PullRequest
1 голос
/ 08 апреля 2020

У нас есть приложение, которое использует WKWebview, но устанавливает allowsLinkPreview в false, потому что нам не нужно поведение предварительного просмотра ссылок. Кажется, что, начиная с iOS 13.4, на устройствах, которые не имеют функцию 3D Touch (более старые устройства и более новые модели iphone), установка allowsLinkPreview в false также отключает выбор всего текста на странице! Для нашего приложения выбор текста критически важен.

Я придумал эту теорию, читающую между строк в документации:

В iOS это свойство доступно на устройствах, поддерживающих 3D Touch.

На устройствах с iOS 13 и более поздними версиями люди могут использовать жест касания и удержания, чтобы открыть контекстное меню, независимо от того, поддерживает ли устройство 3D Touch. На устройствах 3D Touch этот жест позволяет быстрее открыть контекстное меню.

Похоже, что ошибка при отключении предварительного просмотра ссылок отключает все нажатия и удержания жестов в веб-просмотре.

Единственный обходной путь, который мне удалось найти, - это установить allowsLinkPreview в true, а затем отключить контекстное меню через протокол WKUIDelegate . Это отключает всплывающее окно для нажатых ссылок, но не отключает всплывающее окно для нажатых изображений. Кроме того, он по-прежнему позволяет пользователям перетаскивать ссылку в режиме разделенного экрана в Safari, что нам не нужно.

Любые предложения о том, как полностью отключить предварительный просмотр ссылки, контекстное меню / поведение перетаскивания во время по-прежнему разрешается выделение текста!

ОБНОВЛЕНИЕ
Поскольку я контролирую содержимое своего приложения, я смог отключить удержание изображений нажатием, используя следующую команду css : -webkit-touch-callout: none; Так что моя оставшаяся проблема - просто запретить перетаскивание взаимодействий из приложения из WKWebView.

UPDATE 2 Точно так же я смог использовать -webkit-user-drag: none; для отключения перетаскивание ссылок, но все равно было бы полезно узнать исправление, отличное от css, для того, что мне кажется ошибкой Apple.

Ответы [ 2 ]

0 голосов
/ 25 апреля 2020

Это может быть связано с известной ошибкой Webkit, которая предположительно уже исправлена ​​(на момент написания этой статьи):

https://bugs.webkit.org/show_bug.cgi?id=210191

0 голосов
/ 19 апреля 2020

Я столкнулся с той же проблемой, и вот как я ее решил.

wkwebview.UIDelegate = self;

...

- (BOOL)webView:(WKWebView *)webView shouldPreviewElement:(WKPreviewElementInfo *)elementInfo API_AVAILABLE(ios(10.0)) {
    return NO;
}
...