Android Webview and history.pushState?


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)
        }
    }

最新更新