java如何让我的应用程序获取在WebView中单击的链接的URL,对其执行操作,然后加载它?
在这之前,我要说我是一个在Android中编写任何代码的绝对的noob(我基本上是在学习如何通过Stack Overflow的你们这些了不起的家伙和女孩来做每件事:)。我正在制作一个应用程序,它完全只是一个WebView组件,我希望它能够检测到该WebView页面中的链接何时被单击,获取该链接的url,然后如果原始链接中有某个字符串,则将用户重定向到另一个链接。最后,需要使用原始链接或重定向链接重新加载WebView
以下是我在应用程序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没有加载页面,相反,它的日志中只有一个无休止的循环,打印WebView当前页面的url,而不是链接的url。所以在我看来,我的问题是双重的,我不知道该怎么办
仅供参考:中间的两个@overrides仅用于在应用程序启动时加载主页时显示微调器。在最后一次@override之前,一切似乎都很正常
# 1 楼答案
我想出来了。最后一个覆盖应该是:
# 2 楼答案
尝试将return语句添加到被重写函数的末尾,并由于url更改而更改返回值