如何让我的应用程序在 WebView 中单击 link 的 URL,对其执行操作,然后加载它?

How can I get my app to get the URL of a link clicked in WebView, perform operations on it, and then load it?

首先我要说我是一个绝对的菜鸟,不会在 Android 中编写任何代码(我基本上是在 Stack Overflow 上通过你们这些很棒的家伙和女孩学习如何做所有事情:)) .我正在制作一个完全只是 WebView 组件的应用程序,我希望它检测何时单击该 WebView 页面中的 link,获取 link 的 url,然后如果原始 link 中包含某个字符串,则将用户重定向到不同的 link。最后,WebView 需要重新加载原始 link 或重定向 link。

这是我认为发生错误的应用程序 java 端的代码:

public class Grades extends AppCompatActivity {

    private WebView webview;
    String ShowOrHideWebViewInitialUse = "show";
    private ProgressBar spinner;

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

        webview =(WebView)findViewById(R.id.webView);
        spinner = (ProgressBar)findViewById(R.id.progressBar1);
        webview.setWebViewClient(new CustomWebViewClient());

        webview.getSettings().setJavaScriptEnabled(true);
        webview.getSettings().setDomStorageEnabled(true);
        webview.setOverScrollMode(WebView.OVER_SCROLL_NEVER);
        webview.loadUrl("myurl.com");
    }
    // This allows for a splash screen
    // (and hide elements once the page loads)
    private class CustomWebViewClient extends WebViewClient {
        @Override
        public void onPageStarted(WebView webview, String url, Bitmap favicon) {
            // only make it invisible the FIRST time the app is run
            if (ShowOrHideWebViewInitialUse.equals("show")) {
                webview.setVisibility(webview.INVISIBLE);
            }
        }

        @Override
        public void onPageFinished(WebView view, String url) {

            spinner.setVisibility(View.GONE);
            ShowOrHideWebViewInitialUse = "hide";
            view.setVisibility(webview.VISIBLE);
            super.onPageFinished(view, url);
        }

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (url.contains("/courses/")) {
                url = url + "/grades"
                WebView.loadUrl(url);
                return false;
            } else {
                WebView.loadUrl(url)
            }

        }
    }
}

我做了一些故障排除并添加了代码,使应用程序在最后一个 @override 的 logcat 中显示 url。那里的问题是 WebView 没有加载页面,而是在 logcat 打印 current 的 url 中只是一个无限循环WebView 的页面,而不是 link 的 url。所以对我来说,我的问题似乎是双重的,我不知道该怎么做。

有关信息:中间两个 @overrides 仅用于在应用程序启动时加载主页时显示微调器。在最后一个@override 之前,一切似乎都运行良好。

尝试将 return 语句添加到覆盖函数的末尾,并根据 url 更改更改 return 值。

我明白了。最后一个覆盖应该是:

@Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        System.out.println(Uri.parse(url).getHost());
        if ("myurl.com".equals(Uri.parse(url).getHost())) {
            webview.loadUrl(url);
            String newurl = webview.getUrl();
            System.out.println(newurl);
            if (newurl.contains("/grades") || newurl.contains("/users") || newurl.contains("/assignments")) {
                webview.loadUrl(newurl);
                return false;
            }
            if (newurl.contains("myurl.com") && newurl.contains("/grades") == false && newurl.contains("/users") == false && newurl.contains("/assignments") == false) {
                newurl = newurl + "/grades";
                System.out.println(newurl);
                webview.loadUrl(newurl);
                return false;
            }
            return false;
        }
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
        startActivity(intent);
        return true;
    }