我在Android中有一个webView,我在其中打开一个html网页。但它充满了链接和图像,当我点击其中一个时,它会加载到我的webview中。我想禁用此行为,因此如果我单击链接,请不要加载它。我试过这个solution并为myselft编辑了一下,但没有奏效。 我的webview客户代码:
private boolean loaded = false;
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if(loaded == false){
view.loadUrl(url);
loaded = true;
return true;
}else{
return false;
}
}
我的网络视图实施和设置。
WebView wv = (WebView) findViewById(R.id.recipeWv);
ourWebViewClient webViewClient = new ourWebViewClient();
webViewClient.shouldOverrideUrlLoading(wv, URLsave);
wv.setWebViewClient(webViewClient);
wv.setFocusableInTouchMode(false);
wv.setFocusable(false);
wv.setClickable(false);
WebSettings settings = wv.getSettings();
settings.setDefaultTextEncodingName("utf-8");
settings.setLoadWithOverviewMode(true);
settings.setBuiltInZoomControls(true);
示例:如果用户在我的webview中打开StackOverflow主页并单击其中一个链接(如“问题”),则webview应保留在StackOverflow主页上。
答案 0 :(得分:22)
您应该在类变量中保存当前网址,并检查它是否与加载的网址相同。当用户点击链接时,会调用shouldOverrideUrlLoading
并检查网站。
像这样:
private String currentUrl;
public ourWebViewClient(String currentUrl) {
this.currentUrl = currentUrl;
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.equals(currentUrl)) {
view.loadUrl(url);
}
return true;
}
重要提示:不要忘记将WebViewClient
设置为WebView
。
ourWebViewClient webViewClient = new ourWebViewClient(urlToLoad);
wv.setWebViewClient(webViewClient);
答案 1 :(得分:13)
实现WebViewClient并从WebView Client的此方法返回true
webView.setWebViewClient(new WebViewClient(){
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return true;
}
});
答案 2 :(得分:4)
如果您想在不同的窗口中打开网页的内部链接,那么
不要使用
WebView webView;//Your WebView Object
webView.setWebViewClient(new HelpClient());// Comment this line
B' coz setWebViewClient()方法正在处理在同一webview中打开新页面。如此简单的评论这一行。
private class HelpClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (Uri.parse(url).getHost().equals("www.example.com")) {
// This is my web site, so do not override; let my WebView load the page
return false;
}
// Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return true;
}
}
希望这会奏效。
答案 3 :(得分:2)
即使我一直面临同样的问题。我解决了这个问题如下
webView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return true;
}
});
使用lambda表达式
webView.setOnTouchListener((v, event) -> true);
答案 4 :(得分:1)
您需要添加额外的代码行,如此 -
webview.loadUrl(url);
webview.setWebViewClient(new MyWebViewClient());
并添加一个类似MyWebViewClient的类 -
/* Class for webview client */
class MyWebViewClient extends WebViewClient {
// show the web page in webview but not in web browser
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
}
@Override
public void onLoadResource(WebView view, String url) {
super.onLoadResource(view, url);
}
}
答案 5 :(得分:0)
与阿米特·古普塔(Amit Gupta)的回答非常相似,但我发现了一种更简单的方法。
private String currentUrl;
public CustomWebViewClient(String currentUrl) {
this.currentUrl = currentUrl;
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return ! url.equals(currentUrl);
}
定义CustomWebViewClient后,将客户端设置为Webview。
CustomWebViewClient webViewClient = new CustomWebViewClient(urlToLoad);
wv.setWebViewClient(webViewClient);
答案 6 :(得分:0)
请注意,方法签名已在API 24中更改。
对于早于24的API,第二个参数是String,现在不赞成使用该签名。
对于API 24和更高版本,第二个参数是WebResourceRequest。
如果您的应用同时支持API前24和后API,并且您想要禁用所有链接,则可以使用以下方法:
webView.setWebViewClient(new WebViewClient(){
@Override //for APIs 24 and later
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request){
return true;
}
@Override //for APIs earlier than 24
public boolean shouldOverrideUrlLoading(WebView view, String url){
return true;
}
});
答案 7 :(得分:0)
在 @Override onPageFinished
上使用注入javascriptview.loadUrl(
javascript: (function () {
document.addEventListener('click', function (e) {
e.stopPropagation();
}
, true);
})()
);