J'ai cherché et lire beaucoup de postes mais je ne peux pas comprendre comment le faire dans mon code.
Je souhaite utiliser la géolocalisation dans mon application et avoir besoin d'afficher en webchromeclient au sujet de WebViewClient Wich i Utilisez pour les fichiers HTML maintenant et les liens restent dans la même vue.
Lorsque je change ceci en webchromeclient, les liens HTML, comme <a href="http://url/file.php?q=123"
, s'ouvrant soudainement dans le navigateur!
Comment puis-je empêcher cela?
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);
webchromeclient ne contient pas la méthode de recouvrement de la récidivité, le webviewClient. N'oubliez pas que la "View "peut utiliser et utilise à la fois WebViewClient et Webchromeclient en même temps si spécifié. Le WebViewClient ajoute des méthodes non disponibles avec aucun client attribué (remplacement de la navigation dans la vision Web). La même chose avec le Webchromeclient a des méthodes spécifiques qu'il peut utiliser (obtenir le titre de la page sur la charge par exemple).
Vous pouvez donc construire votre code comme celui-ci:
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;
}
});
J'ai pu contourner cela en définissant un factice WebViewClient en plus du webchromeclient. Je ne sais pas pourquoi, mais quand je prends cette ligne, la page Web commence à ouvrir à nouveau dans le navigateur.
mBrowser.setWebViewClient(new WebViewClient());
Pour ouvrir des liens dans le navigateur, vous pouvez utiliser un intent
dans la méthode shouldOverrideUrlLoading
pour lancer l'URL dans un navigateur par rapport à l'utilisation de votre webview
pour gérer le lien:
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;
}
}
}
Si vous souhaitez charger dans l'utilisation 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;
}
};