Как отключить стандартное контекстное меню реакции собственного веб-просмотра и вызвать реактивную поддержку вместо собственного? - PullRequest
1 голос
/ 07 ноября 2019

Мне нужно отключить контекстное меню по умолчанию, которое появляется при выборе текста в веб-просмотре, и вместо этого обрабатывать это событие со стороны JavaScript.

Я добавил следующий код в RNCWebview.m после некоторого первоначального исследования,

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
   NSLog(@"From native side");
   return NO;
}

, а затем передал onSelection реквизит от того, где я рендерил свой компонент. Я дал console.logs в своих модулях узла и получил этот объект как реквизиты для веб-просмотра

{"cacheEnabled": true, "javaScriptEnabled": true, "onSelection": [Function onSelection], "originWhitelist": ["http://*", "https://*"], "source": {"uri": "https://www.google.com"}, "style": {"height": 500}, "useSharedProcessPool": true}

Но я не уверен, как обработать эту функцию и вызвать ее из кодаjective-c. Но все-таки контекстное меню появляется, когда я выбираю какой-то текст в веб-просмотре, а реквизит onSelection не вызывается.

Я уверен, что мне не хватает какой-то ссылки здесь. Пожалуйста, помогите

Ответы [ 2 ]

0 голосов
/ 13 ноября 2019

Мне наконец удалось найти решение для этого. Я изменил код RNCWebView.m и RNCWebViewManager.m, чтобы заблокировать событие onSelection и реализовав следующий код.


- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
    return NO;
}

Это отключило контекстное меню по умолчанию в веб-представлении. Затем, используя injectJavascript prop веб-просмотра, я добавил прослушиватель событий, чтобы наблюдать событие selectionChange и ответить на него пользовательской функцией.

0 голосов
/ 11 ноября 2019

Для остановки menuContext вы можете добавить eventListener для события onselect, чтобы использовать protectDefault в HTML-коде вашего компонента WebView, но onselect можно использовать только в тегах input и textarea .

...