How to get URL from web view in long click?

孤人 提交于 2020-05-16 03:16:41

问题


I have a web view that I want to get the URL when the user long clicks on links. I know I can do this:

// Register the context menu for web view
registerForContextMenu(webView);

And:

 @Override
 public void onCreateContextMenu(@NonNull ContextMenu menu, @NonNull View v, ContextMenu.ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);

    final WebView.HitTestResult result = webView.getHitTestResult();
    Log.i("url is ===" , "result.getExtra()")

 }

But this way, In some search engines like Google, Not be return a URL. This is my log when I long clicked on google search results:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA+klEQVR4AWMgBnwr4pRloAR8KuA89KmAK4V8A/LZ1YGGvPiQy65MtCaQjR8LuDxh/M8FXNlAQ078D2VgJs6APE6rjwWcj4CaOkGaIIZybPucz1FHvCuyeYVBmkBhAArIL6XcEiCvfCzkNMOpCeRPoPMXgFyACAPOcnAYFLK7fSrkDAR6rQmnAe/KBfmBNhQCDbkGtP0yyO8gsU+FHLYgL4EClGgvgDR9zudcCrT9PchVX4q49YmKc5AmkLNBsQDyOygsQK4iygCQoo8FHLGg0AcFIDQm3gPpvXg1zlu88j++2ACFPB51CAmgbf9xYcIGEAAEDSAWM1ATAAC4CbdSzzGZLwAAAABJRU5ErkJggg==

I download a web browser open source from GitHub. In this project, the Programmer does this and this is worked:

 public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    Handler mHandler = new Handler() {
     @Override
        public void handleMessage(Message msg) {
            // Get link-URL.
            String url = (String) msg.getData().get("url");
            Log.i("get url" , url);
        }
    };

So I write this code in my app, But handleMessage not be run. Do I need to do anything else to use handleMessage method?

Do you know another way to get a URL in google search results?


回答1:


Finally, after days, I found a solution. Please try this way:

    @Override
    public void onCreateContextMenu(@NonNull ContextMenu menu, @NonNull View v, ContextMenu.ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);

    String url = null, imageUrl = null;
    WebView.HitTestResult result = ((WebView) v).getHitTestResult();
    switch (result.getType()) {
        case WebView.HitTestResult.SRC_ANCHOR_TYPE:
            url = result.getExtra();
            break;
        case WebView.HitTestResult.IMAGE_TYPE:
            imageUrl = result.getExtra();
            break;
        case WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE:
        case WebView.HitTestResult.EMAIL_TYPE:
        case WebView.HitTestResult.UNKNOWN_TYPE:
            Handler handler = new Handler();
            Message message = handler.obtainMessage();
            ((WebView) v).requestFocusNodeHref(message);
            url = message.getData().getString("url");
            if ("".equals(url)) {
                url = null;
            }
            imageUrl = message.getData().getString("src");
            if ("".equals(imageUrl)) {
                imageUrl = null;
            }
            break;
    }
    showLongPressMenu(url, imageUrl);

}


来源:https://stackoverflow.com/questions/61458858/how-to-get-url-from-web-view-in-long-click

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!