How to get the selected text of webview in ActionMode override

后端 未结 1 340
礼貌的吻别
礼貌的吻别 2020-12-06 03:26

I am adding some custom menu items in the Contextual Action Menu. I need to give a web search feature with the words selected in the WebView.

I override the ActionMo

相关标签:
1条回答
  • 2020-12-06 04:02

    The only way to get text selection from a WebView is based on javascript. This is not specific to the action mode, this is how WebView text selection is supposed to be retrieved according to WebView developers' point of view. They deliberately decided to not provide an API to access text selection from Java.

    The solution comprise 2 approaches.

    With Android API >= 19 you can use evaluateJavascript:

    webview.evaluateJavascript("(function(){return window.getSelection().toString()})()",
    new ValueCallback<String>()
    {
        @Override
        public void onReceiveValue(String value)
        {
            Log.v(TAG, "SELECTION:" + value);
        }
    });
    

    On older builds your only resort is a custom javascript interface with a single method accepting String, which you should call via webview.loadUrl passing the same thing:

    webview.loadUrl("javascript:js.callback(window.getSelection().toString())");
    

    where js is the attached javascript interface:

    webview.getSettings().setJavaScriptEnabled(true);
    webview.addJavascriptInterface(new WebAppInterface(), "js");
    

    and

    public class WebAppInterface
    {
        @JavascriptInterface
        public void callback(String value)
        {
            Log.v(TAG, "SELECTION:" + value);
        }
    }
    
    0 讨论(0)
提交回复
热议问题