Android
Webview允许Android应用程序通过在Web视图中打开目标来处理用户单击链接,而不是在外部浏览器中打开它。
然后可以维护这些页面加载的历史记录,以便用户可以在 Web 视图中前进和后退,就像"真正的"浏览器一样:http://developer.android.com/guide/webapps/webview.html#NavigatingHistory
我的问题是:
- Android webview历史管理是否可以"原生"处理使用window.history.pushState之类的东西推送到历史堆栈的网页?
- 如果是这样,使用哪些数据结构/API 来管理历史记录?Web 视图如何区分具有相同 URL 但 DOM 状态不同的页面的两个版本?
- 如果没有,应用程序开发人员是否可以实现此类支持?
- Webview 支持哪些 HTML5 API(如果有的话)?
若要处理此 api,可以在 WebViewClient 中重写doUpdateVisitedHistory
方法。例如使用 Kotlin
val webView = findViewById(R.id.…)
webView.webViewClient = object : WebViewClient() {
override fun doUpdateVisitedHistory(view: WebView?, url: String?, isReload: Boolean) {
// for example, we want to change icon in toolbar when we can go back
if (view?.canGoBack() == true)
toolbar.navigationIcon = context.getDrawable(R.drawable.back)
} else {
toolbar.navigationIcon = context.getDrawable(R.drawable.close)
}
}