2013-02-02 15 views
12

Ho cercato e letto molti post ma non riesco a capire come farlo nel mio codice.webChromeClient apre il collegamento nel browser

Desidero utilizzare la geolocalizzazione nella mia app e devo visualizzare in webChromeClient al posto di webViewClient che utilizzo ora per i file html e i collegamenti rimangono nella stessa vista.

Quando lo cambio in webChromeClient, i collegamenti html, come <a href="http://url/file.php?q=123", si aprono improvvisamente nel browser!

Come posso evitare questo?

myWebView = new WebView(this); 
myWebView.getSettings().setJavaScriptEnabled(true); 
myWebView.getSettings().setLoadWithOverviewMode(true); 
myWebView.getSettings().setUseWideViewPort(true); 
myWebView.getSettings().setGeolocationEnabled(true); 
myWebView.setWebChromeClient(new WebChromeClient() { 
public void onGeolocationPermissionsShowPrompt(String origin, android.webkit.GeolocationPermissions.Callback callback) { 
     callback.invoke(origin, true, false); } 
}); 
myWebView.loadUrl("file:///android_asset/HTML/index.html"); 
setContentView(myWebView); 

risposta

2

per aprire i link nel browser è possibile utilizzare un intent nel metodo shouldOverrideUrlLoading per lanciare l'URL in un browser rispetto all'utilizzo tua webview per gestire il link:

webView.setWebViewClient(new WebViewClient(){ 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     if (url != null && url.startsWith("http://")) { 
      view.getContext().startActivity(
       new Intent(Intent.ACTION_VIEW, Uri.parse(url))); 
      return true; 
     } else { 
      return false; 
     } 
    } 
} 

Se si desidera caricare nell'uso WebView:

WebViewClient yourWebClient = new WebViewClient() 
{ 
    // Override page so it's load on my view only 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) 
    { 
     // This line we let me load only pages with an anchor tag 
     if (url.contains("url") == true) 
      //Load new URL Don't override URL Link 
     return false; 

    // Return true to override url loading (In this case do nothing). 
    return true; 
    } 
}; 
+0

Ci dispiace, ma questo è il contrario. Voglio che i link, come Harry

+0

Vedere le modifiche che ho postato. – Nick

+4

Grazie per aver cercato di aiutare Nick ma ti ho perso ... Stai programmando per WebViewClient e ti sto chiedendo di WebChromeClient ... – Harry

6

sono stato in grado di aggirare questo impostando un WebViewClient manichino in aggiunta al WebChromeClient. Non sono sicuro del perché, ma quando togli questa linea la pagina web si apre di nuovo nel browser.

mBrowser.setWebViewClient(new WebViewClient()); 
49

WebChromeClient non contiene il metodo shouldOverrideUrlLoading, il WebViewClient fa. Ricordare che "WebView" può e utilizza WebViewClient e WebChromeClient contemporaneamente, se specificato. WebViewClient aggiunge metodi non disponibili all'utente senza client (mantenendo la navigazione nella visualizzazione Web). Lo stesso con WebChromeClient ha metodi specifici che può utilizzare (ad esempio, ottenere il titolo della pagina sul caricamento).

modo da poter costruire il vostro codice come questo:

WebView web = (WebView)findViewById(R.id.web); 
WebSettings webSettings = web.getSettings(); 
webSettings.setJavaScriptEnabled(true); 
webSettings.setGeolocationEnabled(true); 
webSettings.setSupportMultipleWindows(true); // This forces ChromeClient enabled.  

web.setWebChromeClient(new WebChromeClient(){ 
    @Override 
    public void onReceivedTitle(WebView view, String title) { 
     getWindow().setTitle(title); //Set Activity tile to page title. 
    } 
}); 

web.setWebViewClient(new WebViewClient() { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     view.loadUrl(url); 
     return false; 
    } 
}); 
+5

ha risolto il mio problema. Supponevo (e credo molti altri sviluppatori) che dovremmo impostare WebChromeClient OR WebViewClient, ma non entrambi. – Bugdr0id

+0

questo mi aiuta, stavo pensando come ha detto @ Bugdr0id –

+0

risolto il mio problema. Prima ho provato http://developer.android.com/guide/webapps/webview.html, ma il browser ha ancora lanci. –

Problemi correlati