【发布时间】:2015-06-28 22:53:34
【问题描述】:
在我的应用程序中有一个显示 Html 内容的 WebView 和一个后退按钮,让用户在浏览器历史记录中导航。在 WebChromeClient 中,我在 onReceivedTitle() 中获取 Html 页面标题并将其显示在我的应用中。
向用户显示第一页并显示第一页标题。然后,用户可以单击 Html 中的超链接以进入下一页。第二页有一个不同的标题,这是正确显示的。问题是,如果用户单击“后退”按钮,则从历史记录中显示第一页,但不会再次调用 onReceivedTitle()。所以我的第一页显示第二页的标题错误。
如何获取通过调用 goBack() 加载的页面的标题?
这里有一些简化的代码来演示。想象一个带有 TextView、WebView 和 Button 的布局。另外,想象一下 assets 文件夹中有两个 Html 文件,其中 pageone.html 链接到 pagetwo.html 并且两个页面具有不同的标题。
public class MyActivity extends Activity {
WebView webView;
TextView title;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
webView = (WebView) findViewById(R.id.webView);
title = (TextView) findViewById(R.id.title);
webView.loadUrl("file:///android_asset/pageone.html");
webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onReceivedTitle(WebView view, String titleText) {
super.onReceivedTitle(view, titleText);
title.setText(String.format("Title: %s", titleText));
}
});
final Button button = (Button) findViewById(R.id.backButton);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (webView.canGoBack()) {
webView.goBack();
}
}
});
}
}
【问题讨论】:
-
你可以获取 webview 并调用 webView.getTitle();
-
是的,但在什么情况下? onPageFinished() 可以用,但是之后 onReceivedTitle() 好像没用了。