搜索

首页  >  问答  >  正文

javascript - Android 的 webview 中怎么监听 url 的 hash 变化

场景

Android 的 webview 中加载一个 SPA (单页面应用)网站

过程

我通过 shouldoverrideurl 方法来监听 Webview 的 URL,对 URL 进行某些预处理

但是,SPA 中大部分是 hash 值变化,因此这个方法就监听不到变化

举例

a.html#/home 跳转到 a.html#/other

问题

请问有什么办法监听 hash 值的变化吗?

ringa_leeringa_lee2716 天前1847

全部回复(1)我来回复

  • 学习ing

    学习ing2017-06-12 09:27:05

    只能通过 HTML5 新增加的 window.onhashchange() API。shouldoverrideurl 应该监听不到吧。

    如果你不想修改 js 代码,可以在 java 中注入:

    定义一个处理 js 的类:

    private class MyJSI {
        public void doStuff() {
            // 你的逻辑
        }
    }
    

    注入到 webview 中:

    webView.addJavascriptInterface(new MyJSI(), "myjsi");
    

    监听 onhashchange 事件:

    webview.setWebViewClient(new WebViewClient() {  
    
        public void onPageFinished(WebView view, String url) {
            view.loadUrl("javascript:window.onhashchange = function() { myjsi.doStuff(); };");
        }
    });
    

    回复
    0
  • 取消回复