2012-04-03 2 views
27

Я сделал одно примерное приложение с помощью WebView, в этом веб-браузере URL-адрес поступает из веб-служб. Он работает нормально, но если я нажму любую ссылку в этом веб-браузере, он автоматически перейдет на веб-браузер по умолчанию. Но я хочу открыть только в своем веб-приложении приложения. Вот мой код:Android WebView открывается в WebView, а не в браузере по умолчанию

WvBikeSite = (WebView) findViewById(R.id.wv_bikeWebsite); 
wvBikeSite.loadUrl(getBundle.getString("www")); 

ответ

64

Необходимо настроить webViewClient для своего webV МЭН.

Пример:

this.mWebView.setWebViewClient(new WebViewClient(){ 

    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url){ 
     view.loadUrl(url); 
     return true; 
    } 
}); 
+0

благодаря теперь его работает отлично – selva

+0

это работает! но есть ли способ разрешить ссылки, для которых target = _blank загружается в браузере? – mim

+1

@mim, вы можете анализировать переменную url и возвращать false, если она содержит определенную строку –

1

Вы всегда можно открыть URL в WebView с помощью этого:

 @Override 
    public void onCreate(Bundle savedInstanceState) { 
    webview.setWebViewClient(new MyWebViewClient()); 
webview.getSettings().setJavaScriptEnabled(true); 
webview.getSettings().setPluginsEnabled(true); 
    } 


    private class MyWebViewClient extends WebViewClient { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 


      view.loadUrl(url); 
      return true; 
     } 

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

     } 
    }  
+0

благодарит его работа Финны – selva

+0

Пожалуйста оцените ответ – saba

10

Вам нужно настроить WebViewClient для того, чтобы переопределить это поведение (открытие ссылки с помощью веб-браузера) , Вы, очевидно, ваш WebView объявили, но затем установить WebViewClient так:

WebView myWebView = (WebView) findViewById(R.id.webview); 
myWebView.setWebViewClient(new WebViewClient()); 

Затем вам нужно определить свой WebViewClient():

private class MyWebViewClient extends WebViewClient { 
@Override 
public boolean shouldOverrideUrlLoading(WebView view, String url) { 
    if (Uri.parse(url).getHost().equals("www.example.com")) { 
     // Designate Urls that you want to load in WebView still. 
     return false; 
    } 
    // Otherwise, give the default behavior (open in browser) 
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
    startActivity(intent); 
    return true; 
} 
} 

Затем начните WebViewClient:

WebView myWebView = (WebView) findViewById(R.id.webview); 
myWebView.setWebViewClient(new MyWebViewClient()); 

http://developer.android.com/guide/webapps/webview.html

+1

я попытался так же, теперь его работает спасибо Mark Lyons – selva

2

Вам необходимо позвонить wvBikeSite.setWebViewClient, например:

MyWebViewClient wvc = new MyWebViewClient(); 
    wvBikeSite.setWebViewClient(wvc); 

Где MyWebViewClient переопределяет shouldOverrideUrlLoading, а именно:

private class MyWebViewClient extends WebViewClient { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     view.loadUrl(url); 
     return true; 
    } 
} 
5

я сталкиваюсь такая же проблема, и я просто зафиксировал его, добавив одну строку.

webview.setWebViewClient(new WebViewClient()); 

и это решило мою проблему.

+1

, не нужно создавать пользовательский подкласс WebViewClient. –

1

Я сделал, как это и его работать идеально ..

mWebView.setWebViewClient(new WebViewClient() { 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      if (url != null && url.startsWith("http://")) { 
       mWebView.loadUrl(url); 
       return true; 
      } else { 
       return false; 
      } 
     } 
    }); 
0

Вот мой код, как решить данную проблему (когда cliking по ссылке он просит браузер по умолчанию для OPN ссылки)

import android.os.Bundle;import android.annotation.SuppressLint;import android.app.Activity; 
import android.view.Menu;import android.webkit.WebChromeClient; 
import android.webkit.WebView;public class MainActivity extends Activity{ 
`@SuppressLint("SetJavaScriptEnabled")@Override protected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);String url="http://google.com";WebView Webview=(WebView) this.findViewById(R.id.webView1);  Webview.getSettings().setJavaScriptEnabled(true);Webview.loadUrl(url);}@Override public boolean onCreateOptionsMenu(Menu menu){//Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu);return true;}`} 
0

Это откроет какую-либо конкретную ссылку только в вашем приложении ...

WebView web; 

web = (WebView) findViewById(R.id.web); 
web.setWebViewClient(new WebViewClient(){ 

    @Override 
    public void onPageStarted(WebView view, String url, Bitmap favicon) { 
     // TODO Auto-generated method stub 
     super.onPageStarted(view, url, favicon); 
    } 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     if (url != null && url.startsWith("http://www.xplorerstrick.net")) { 
      view.loadUrl(url); 
      progDailog.show(); 
      return true; 
     } 
     else { 
      Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
      startActivity(intent); 
      return true; 
     } 
    } 
} 
0
webview.setWebViewClient(new WebViewClient()); 
webview.loadUrl(url); 

Устанавливать клиент webview.

1

Попробуйте это, этот метод устарел.

public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { 
      return super.shouldOverrideUrlLoading(view, request); 
     } 
0

Большая часть ответа является правильным, но, пожалуйста, обратите внимание, что: SupportMultipleWindows должен быть установлен как ложь.

mWebView.getSettings().setSupportMultipleWindows(false); 

и теперь установить webViewClint и получить загрузки URL.

mWebView.setWebViewClient(new WebViewClient() { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url){ 

    Log.d(TAG,"URL: "+url); 
    view.loadUrl(url); 

    /** 
    * if you wanna open outside of app 
    if (url != null && url.startsWith(URL)) { 
    view.loadUrl(url); 
    return false; 
    } 
    // Otherwise, give the default behavior (open in browser) 
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
    startActivity(intent);**/ 
    return true; 

} 

@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); 
} 

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

    } 
});