如何在Android WebView中获取加载的网页标题?

我在我的应用程序中使用WebView,我有一个要求根据用户页面更改应用程序的标题。 我怎样才能在Android WebView中做到这一点?

我通过以下行在iphone中做到了这一点

self.title = [webPage stringByEvaluatingJavaScriptFromString:@"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(); String url = b.getString("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 string 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.string.app_name); } }); mWebView.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; // return super.shouldOverrideUrlLoading(view, url); } @Override public void onLoadResource(WebView view, String url) { // TODO Auto-generated method stub super.onLoadResource(view, url); } @Override public void onPageFinished(WebView view, String 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()); } }); } 

你将不得不使用自定义的WebViewClient来完成这个任务。 你将覆盖onPageFinished()方法,所以当一个新的页面加载完成后,你可以设置webview到适当的标题。

以下是上述的一个示例实现:

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

你要做的就是你正在初始化你的web视图。 将“ExperimentingActivity”replace为您的活动名称。

如果您已经覆盖了WebViewClient,只需将此函数或代码添加到您已有的函数中即可。

你可以在这里使用的类和函数的更多信息:

Android开发人员:活动 – setTitle()

Android开发人员:WebViewClient

Android开发人员:WebView

我的观察是,使用WebChromeClient的网页标题的时间比使用WebViewClient时间要less

 webview.setWebChromeClient(new WebChromeClient() { @Override public void onReceivedTitle(WebView view, String title) { super.onReceivedTitle(view, title); if (!TextUtils.isEmpty(title)) { YourActivity.this.setTitle(title); } } }); 

所以我的经验你应该使用onReceivedTitle和onPageFinished两者。 我发现有时onPageFinished你不会得到通知,如果你前端使用react-router或类似的东西。 onReceivedTitle有缺陷,因为@ michael-levy提到。

如果你不想要整个标题,只需要一个域名,就好比如果你只想从www.google.com只显示​​“Google”,而且你有这个标题的所有查询参数。

  URL hostUrl= new URL(webView.getUrl()); String title = hostUrl.getHost(); title = title.startsWith("www.") ? title.substring(4) : title; 
 private WebViewClient mWvClient = new WebViewClient() { @Override public void doUpdateVisitedHistory(WebView view, String url, boolean isReload) { String title = view.getTitle();//getTitle super.doUpdateVisitedHistory(view, url, isReload); } }