2012-04-03 15 views
27

Ich habe eine Beispielanwendung mit WebView, in dieser Webansicht die URL kommt von Webdiensten. Es funktioniert gut, aber wenn ich auf einen Link in diesem WebView klicke, wird automatisch der Standard-Webbrowser verwendet. Aber ich möchte nur innerhalb meiner Anwendung die Webansicht öffnen. Hier ist mein Code:Android WebView klicken öffnen in WebView nicht ein Standardbrowser

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

Antwort

64

Sie müssen einen WebViewClient für Ihren WebV einrichten iew.

Probe:

this.mWebView.setWebViewClient(new WebViewClient(){ 

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

Dank jetzt seine feinen – selva

+0

arbeitet das funktioniert! Aber gibt es eine Möglichkeit, Links zu erlauben, die target = _blank stattdessen im Browser laden? – mim

+1

@mim, können Sie die URL-Variable analysieren und false zurückgeben, wenn sie eine bestimmte Zeichenfolge enthält –

1

Sie können jederzeit offen url innerhalb webview durch diese Verwendung:

 @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

dank seiner Arbeits Finne – selva

+0

Bitte stimmen die Antwort – saba

10

Sie benötigen einen WebViewClient, um einzurichten, dass das Verhalten außer Kraft zu setzen (Öffnungs Links über den Webbrowser) . Sie haben offensichtlich Ihre WebView erklärt, aber dann ein WebViewClient wie so ein:

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

Dann müssen Sie Ihre WebViewClient definieren():

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

Dann wird Ihr WebViewClient starten:

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

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

+1

i auch auf diese Weise versucht, jetzt seine Arbeiten durch Mark Lyons – selva

2

Sie müssen wvBikeSite.setWebViewClient nennen, zB:

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

Wo MyWebViewClient shouldOverrideUrlLoading überschreibt, nämlich:

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

I gleichen Problem und ich habe es einfach durch Hinzufügen einer einzelnen Zeile behoben.

webview.setWebViewClient(new WebViewClient()); 

und das löste mein Problem.

+1

keine Notwendigkeit, benutzerdefinierte Unterklasse von WebViewClient zu machen. –

1

tat ich so, und seine Arbeit perfekt ..

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

Hier ist mein Code, wie das obige Problem zu lösen (wenn auf den Link cliking es für Standard-Browser fragen Sie den Link zum 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

Dies Wird einen bestimmten Link nur in Ihrer App öffnen ...

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

Legen Sie den Webview-Client fest.

1

Versuchen Sie diese, diese Methode ist veraltet.

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

Der größte Teil der Antwort ist richtig, aber bitte beachten Sie, dass: SupportMultipleWindows müssen als falsch eingestellt werden.

mWebView.getSettings().setSupportMultipleWindows(false); 

und jetzt webViewClint gesetzt und das Laden URL erhalten.

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

    } 
});