WebView注入JavaScript代码

问题:应用需要统计网页打开情况,部分三方网页在网页跳转时无法在onPageFinished中监测到。使用代码注入在网页url发生变化时调用原生代码,传入新的url。

一,其他设置

WebView 设置支持 JavaScript 脚本

webSettings.setJavaScriptEnabled(true);

使用 addJavascriptInterface 方法将 Java 对象映射到 JavaScript 中

mX5Webview.addJavascriptInterface(new Object(){
            //***************************************************************************
            // 1.tdxFuncName 功能名称
            // 2.tdxFuncParam 参数
            // 3.tdxCallBack 回调Web函数
            // 4.tdxPageID 网页唯一ID
            //***************************************************************************
            @SuppressWarnings("unused")
            @JavascriptInterface
            public void TdxWebCall(final String tdxFuncName,final String tdxFuncParam,final String tdxCallBack,final String tdxPageID)
            {
                //todo
            }
    

        },"tdx_java");

二,待注入的JS代码

private void processInject(){
        new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
            @Override
            public void run() {
                if(mX5Webview == null)
                    return;
                String javascript = "javascript:" +
                        "var lastUrl = window.location.href;" +
                        "setInterval(function() {" +
                        "const currentUrl = window.location.href;" +
                        "if (currentUrl !== lastUrl) {" +
                        "console.log(window.location.href);" +
                        "lastUrl = currentUrl;" +
                        "window.tdx_java.TdxWebCall(\"onUrlChanged\", JSON.stringify({\"currentUrl\":currentUrl}),\"callback\", \"id\" );" +
                        "}" +
                        "}, 500);";
                mX5Webview.loadUrl(javascript);
            }
        },2000);
    }

正常在onPageFinished方法中调用此方法,实现向WebView中注入JS代码,如不在这里调用需确保页面已完成加载,可设置一个延时防止页面未加载完成。

三,调试方法

可通过打印声明的变量lastUrl验证代码是否注入成功

edge调试链接:

edge://inspect/#devices

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汤面不加鱼丸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值