如何禁用react native webview的默认上下文菜单,并调用react prop而不是native prop



我需要禁用在web视图中选择文本时弹出的默认上下文菜单,而从javascript端处理此事件。

经过初步研究,我在RNCWebview.m中添加了以下代码,

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

然后传递一个CCD_ 2道具,我从那里渲染了我的组件。我在节点模块中提供了console.log,并将此对象作为webview 的道具

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

但我不知道如何处理这个函数并从objective-c代码中调用它。但是,当我在网络视图中选择一些文本并且没有调用onSelection道具时,上下文菜单仍然会显示。

我确信我遗漏了一些环节。请帮助

对于stop menuContext,您可以为onselect事件添加一个eventListener,以便在WebView组件的html代码中使用preventDefault,但onselect只能在输入和文本区域标记中使用。

我终于找到了解决方案。我修改了代码RNCWebView.mRNCWebViewManager.m以阻止onSelection事件,并通过实现以下代码。


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

这禁用了web视图中的默认上下文菜单。然后,使用webview的injectJavascript道具,我添加了一个事件侦听器来观察selectionChange事件,并使用自定义函数对其进行响应。

最新更新