我想知道在android studio webview上是否有可能禁用页面上的一些链接(telegram instagr



简而言之,我希望当我在webview中点击telegram时我不希望链接打开或者如果我点击telegram,我希望留在同一页面而不打开链接

我试着搜索,但我没有找到任何东西,最多我发现了一些关于如何禁用所有链接在webview,而不是一些

你应该使用webview客户端来拦截点击。

代码:

在你的webview设置webViewClient

webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
String url = request.getUrl().toString();
if (isValidEmail(url)) {
return true;
} else if (url.contains("www.instagram.com"))
return true;
else if (url.contains("https://t.me"))
return true;
else
return super.shouldOverrideUrlLoading(view, request)
}
@Override
public void onLoadResource(WebView view, String url) {
// do nothing
//super.onLoadResource(view, url);
}
});

检查是否为有效邮件:

public static boolean isValidEmail(CharSequence target) {     return (!TextUtils.isEmpty(target) && Patterns.EMAIL_ADDRESS.matcher(target).matches());
}

现在在shouldOverrideUrlLoading中,您可以根据需要检查url并返回是否覆盖url加载。

@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = (WebView) findViewById(R.id.webview);

webView.setWebViewClient(new WebViewClient());

webView.setWebChromeClient(new MyChrome());
webView.loadUrl("https://streamingcommunity.love/");
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
}
@Override
public void onBackPressed() {
if (webView.canGoBack()) {
webView.goBack();
} else {
super.onBackPressed();
}
}
private class MyChrome extends WebChromeClient {
private View mCustomView;
private WebChromeClient.CustomViewCallback mCustomViewCallback;
protected FrameLayout mFullscreenContainer;
private int mOriginalOrientation;
private int mOriginalSystemUiVisibility;
MyChrome() {}
public Bitmap getDefaultVideoPoster()
{
if (mCustomView == null) {
return null;
}
return BitmapFactory.decodeResource(getApplicationContext().getResources(), 2130837573);
}
public void onHideCustomView()
{
((FrameLayout)getWindow().getDecorView()).removeView(this.mCustomView);
this.mCustomView = null;
getWindow().getDecorView().setSystemUiVisibility(this.mOriginalSystemUiVisibility);
setRequestedOrientation(this.mOriginalOrientation);
this.mCustomViewCallback.onCustomViewHidden();
this.mCustomViewCallback = null;
}
public void onShowCustomView(View paramView, WebChromeClient.CustomViewCallback paramCustomViewCallback)
{
if (this.mCustomView != null)
{
onHideCustomView();
return;
}
this.mCustomView = paramView;
this.mOriginalSystemUiVisibility = getWindow().getDecorView().getSystemUiVisibility();
this.mOriginalOrientation = getRequestedOrientation();
this.mCustomViewCallback = paramCustomViewCallback;
((FrameLayout)getWindow().getDecorView()).addView(this.mCustomView, new FrameLayout.LayoutParams(-1, -1));
getWindow().getDecorView().setSystemUiVisibility(3846 | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
webView.saveState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
webView.restoreState(savedInstanceState);
}
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
String url = request.getUrl().toString();
if (isValidEmail(url)) {
return true;
} else if (url.contains("www.instagram.com")) {
return true;
} else if (url.contains("https://t.me"))
return true;
} else {
return super.shouldOverrideUrlLoading(view, request);
}
}
@Override
public void onLoadResource(WebView view, String url) {
// do nothing
//super.onLoadResource(view, url);
}
public boolean isValidEmail(CharSequence target) {
return (!TextUtils.isEmpty(target) && Patterns.EMAIL_ADDRESS.matcher(target).matches());
}
});
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
String url = request.getUrl().toString();
if (url.contains("mailto:"))
return true;
if (url.contains("www.instagram.com"))
return true;
if (url.contains("https://t.me"))
return true;
else
return super.shouldOverrideUrlLoading(view, request);
}
});