Comment obtenir le titre d’une page Web chargée dans Android WebView?

J’utilise un WebView dans mon application, j’ai l’obligation de changer le titre de l’application en fonction de la page sur laquelle l’utilisateur est installé. Comment puis-je le faire dans Android WebView?

Je l’ai fait en iphone en suivant la ligne

self.title = [webPage ssortingngByEvaluatingJavaScriptFromSsortingng:@"document.title"] @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Adds Progrss bar Support this.getWindow().requestFeature(Window.FEATURE_PROGRESS); setContentView(R.layout.webview ); // Makes Progress bar Visible getWindow().setFeatureInt( Window.FEATURE_PROGRESS, Window.PROGRESS_VISIBILITY_ON); mWebView = (WebView) findViewById( R.id.webview ); //This is the id you gave //to the WebView in the main.xml mWebView.getSettings().setJavaScriptEnabled(true); mWebView.getSettings().setSupportZoom(true); //Zoom Control on web (You don't need this //if ROM supports Multi-Touch mWebView.getSettings().setBuiltInZoomControls(true); //Enable Multitouch if supported by ROM // Load URL Bundle b = getIntent().getExtras(); Ssortingng url = b.getSsortingng("url"); Log.d(TAG, "url " + url); mWebView.loadUrl(url); // Sets the Chrome Client, and defines the onProgressChanged // This makes the Progress bar be updated. mWebView.setWebChromeClient(new WebChromeClient() { public void onProgressChanged(WebView view, int progress){ //Make the bar disappear after URL is loaded, and changes ssortingng to Loading... myActivity.setTitle("Loading..."); myActivity.setProgress(progress * 100); //Make the bar disappear after URL is loaded // Return the app name after finish loading if(progress == 100) myActivity.setTitle(R.ssortingng.app_name); } }); mWebView.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, Ssortingng url) { view.loadUrl(url); return true; // return super.shouldOverrideUrlLoading(view, url); } @Override public void onLoadResource(WebView view, Ssortingng url) { // TODO Auto-generated method stub super.onLoadResource(view, url); } @Override public void onPageFinished(WebView view, Ssortingng url) { super.onPageFinished(view, url); ImageView logoImageView = (ImageView)findViewById(R.id.logoimage); logoImageView.setVisibility(View.GONE); Log.d(TAG, "view.getTitle() " + view.getTitle()); myActivity.setTitle(view.getTitle()); } }); } 

Vous devrez utiliser un WebViewClient personnalisé pour y parvenir. Vous allez remplacer la méthode onPageFinished () afin qu’une nouvelle page soit chargée, vous pouvez définir la vue Web sur le titre approprié.

Vous trouverez ci-dessous un exemple d’implémentation de ce qui précède:

  WebView mWebView = (WebView) findViewById(R.id.mwebview); mWebView.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, Ssortingng url) { ExperimentingActivity.this.setTitle(view.getTitle()); } }); 

Vous allez faire cela lorsque vous initialisez votre webview. Remplacez “ExperimentingActivity” par le nom de votre activité.

Si vous écrasez déjà WebViewClient, ajoutez simplement cette fonction ou le code à votre fonction existante.

Vous pouvez obtenir plus d’informations sur les classes et les fonctions que j’utilise ici:

Développeurs Android: Activity – setTitle ()

Développeurs Android: WebViewClient

Développeurs Android: WebView

Mon observation est que, vous obtenez le titre de la page Web en utilisant WebChromeClient en moins de temps que d’utiliser WebViewClient

 webview.setWebChromeClient(new WebChromeClient() { @Override public void onReceivedTitle(WebView view, Ssortingng title) { super.onReceivedTitle(view, title); if (!TextUtils.isEmpty(title)) { YourActivity.this.setTitle(title); } } }); 
 private WebViewClient mWvClient = new WebViewClient() { @Override public void doUpdateVisitedHistory(WebView view, Ssortingng url, boolean isReload) { Ssortingng title = view.getTitle();//getTitle super.doUpdateVisitedHistory(view, url, isReload); } } 

Donc, mon expérience, vous devriez utiliser onReceivedTitle et onPageFinished les deux. Je trouve que parfois, onPageFinished, vous ne serez pas averti si vous utilisez front-réacting ou quelque chose de similaire. Et onReceivedTitle a un défaut comme @ michael-levy mentionné.

Que faire si vous ne voulez pas l’intégralité du titre et juste un nom de domaine, comme si vous souhaitez afficher uniquement «Google» sur http://www.google.com, et que vous avez tous les parameters de requête dans ce titre.

  URL hostUrl= new URL(webView.getUrl()); Ssortingng title = hostUrl.getHost(); title = title.startsWith("www.") ? title.subssortingng(4) : title;