【问题标题】:How to get URL from long click links in a webview?如何从网页视图中的长点击链接获取 URL?
【发布时间】:2020-06-19 23:26:03
【问题描述】:

我想在 android 中为 web 视图创建一个上下文菜单。我的问题是我无法从点击的链接中获取 URL。我写这段代码来记录点击的链接:

webView.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(final View v) {

            WebView webView1 = (WebView) v;
            WebView.HitTestResult hitTestResult = webView1.getHitTestResult();
            Log.i("LinkClicked", hitTestResult.getExtra());

            return false;
        }
    });

使用此代码,当长按 stackoverflow 等网站中的链接时,日志如下:

https://stackoverflow.com/questions

一切正常,但是当长按谷歌搜索结果时,日志如下:

数据:图像/ PNG; BASE64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAJFBMVEVHcEz / AAD / AAD / AAD / AAD / AAD / AAD / AAD / G4P ///// KCJ / 7e0I8rGvAAAAB3RSTlMAT0g5Ggp + EilkVQAAAENJREFUGJVjYCAGsDAzggEzC5jLxo4E2BgYWNlRACsDM5jmggkwMzCBaQ5uqBATTICTk4OAAEILhqEY1mI4DNPphAAASIsES4gsgWgAAAAASUVORK5CYII = P>

它不返回链接。我该如何解决这个问题?

【问题讨论】:

  • 这能回答你的问题吗? Get clicked url in web view in Android
  • @VikaSGuttE 在 setOnLongClickListener 中使用 shouldOverrideUrlLoading 方法时,不记录任何内容。
  • 试试我下面的答案

标签: android url android-webview long-click


【解决方案1】:
public class MainActivity extends AppCompatActivity {

    WebView webView;
    String URL1 = "https://stackoverflow.com/questions/60577403/how-to-get-url-from-long-click-links-in-a-webview/60577736?noredirect=1#comment107173847_60577736";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        webView = findViewById(R.id.webview);

        webView.clearHistory();
        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setLoadWithOverviewMode(true);
        webView.getSettings().setUseWideViewPort(true);
        webView.setWebViewClient(new WebViewClient() {

            public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {

            }

            public void onPageFinished(WebView view, String url) {

            }

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                URL1 = url;
                return super.shouldOverrideUrlLoading(view, url);
            }
        });
        webView.loadUrl(URL1);
        // Register the context menu for web view
        registerForContextMenu(webView);
    }

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

        // Get the web view hit test result
        final WebView.HitTestResult result = webView.getHitTestResult();

        // If user long press on url
        if (result.getType() == WebView.HitTestResult.ANCHOR_TYPE ||
                result.getType() == WebView.HitTestResult.SRC_ANCHOR_TYPE) {

            // Set the title for context menu
            menu.setHeaderTitle("\t\t\t\t\t\t\t\t\t\t ◦ ◉ ⦿ Select ⦿ ◉ ◦ \t");

            // Add an item to the menu
            menu.add(0, 1, 0, " \t \t➤\t Show URL")
                    .setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
                        @Override
                        public boolean onMenuItemClick(MenuItem menuItem) {
                            String Pressed_url = result.getExtra();
                            Toast.makeText(MainActivity.this, "URL is:-" + Pressed_url,
                                    Toast.LENGTH_SHORT).show();
                            return false;
                        }
                    });
        }
    }
}

从github下载Full Code

输出

【讨论】:

  • 当我长按链接时这不起作用。只是在单击链接和 Web 视图加载链接时工作。我想在长按时获取 URL 并将其用于上下文菜单,请看这个:link
  • 对此我感到非常抱歉,您能解释一下吗?我登录 clicked_url 但什么也没看到:my code
  • @MartinBigot 添加了完整的代码,希望这能奏效......!享受编码,祝你好运。
  • 非常非常感谢!其工作完整且正确。但仍然没有返回 google 搜索结果 URL。在 google.com 中搜索任何内容并长按某个站点,它会返回一个模糊的字符串。感谢您的关注...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-08
  • 2012-09-06
  • 1970-01-01
  • 2017-11-08
  • 1970-01-01
  • 2011-06-08
  • 1970-01-01
相关资源
最近更新 更多