【问题标题】:Listen for URL fragment id change in WebView监听 WebView 中的 URL 片段 id 变化
【发布时间】:2014-12-20 17:54:09
【问题描述】:

似乎shouldInterceptRequest()、onPageStarted() 和shouldOverrideUrlLoading() 等WebViewClient 方法只侦听导致WebView 加载新页面的URL 更改。有没有办法在 WebView 上检测片段 ID(即 index.html#fragment_id)的 URL 更改?

【问题讨论】:

  • 在javascript中使用webview和window hashChange事件的JavascriptInterface

标签: android android-webview webviewclient


【解决方案1】:

正如 mitvenkatesan 在他对该问题的评论中所描述的,这可以通过覆盖 WebView 内页面的 window.onhashchange() 事件来实现。

原来another question已经解决了这个解决方案。

【讨论】:

    【解决方案2】:

    我知道这是一个非常古老的问题,但我发现了 Stack Overflow 中任何地方都没有的解决方案。 jpetitto 的答案有效,但如果我们使用散列更改进行路由或其他此类功能,它会弄乱 javascript。

    我发现通过覆盖WebViewClient 中的doUpdateVisitedHistory 方法,我们可以在哈希更改时捕获url。例如,请参见下面的 sn-p。

    mWebView.setWebViewClient(new WebViewClient() {
    
            @Override
            public void doUpdateVisitedHistory(WebView view, String url, boolean isReload) {
                super.doUpdateVisitedHistory(view, url, isReload);
                // somecode to run on hash change.
            }
    
    }
    

    注意:此方法在哈希更改和 url 更改时触发。

    【讨论】:

    • 来自一个下午一直在搜索的人:谢谢。
    • 这很好,它会检测到 url 的变化。但是您能否建议如何在不重新加载页面的情况下导航到 SPA 中的页面。我正在搜索,但找不到任何提示。谢谢
    • 我相信您希望在不重新加载页面的情况下使用路径路由而不是哈希路由。在这种情况下,您可以使用历史 API。 developer.mozilla.org/en-US/docs/Web/API/History
    猜你喜欢
    • 2015-07-06
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    • 2019-05-27
    • 1970-01-01
    相关资源
    最近更新 更多