安卓,如何在不使用javascript的情况下监控webview内容的大小变化?

问题描述 投票:0回答:1

有一个webview,当webview中的内容变化时,需要重新定位一些覆盖。

一种方法是在加载的html中监听 "resize"。

    function onWindowResize(){
        // notify native side
        android.onWebPageStateChange('onWindowResize', data)
    }

    window.addEventListener("resize", onWindowResize);

并在webview的@JavascriptInterface函数中使用。onWebPageStateChange 它应该知道webview内容大小的变化。

然而,如果javascript不是一个选项(由于任何原因),是否有一个等价的事件在webview本身,所以它可以捕捉到webview内容的大小变化?

android-webview
1个回答
0
投票

似乎这样做不需要在html中预先存在javascript,尽管第一次调用可能会抛出一个异常,说明该调用还未定义。

    private fun addingHtmlWindowSizeChangeListener() {
        val strJs = "window.addEventListener(\"resize\", \n" +
            "function onWindowResize(){\n" +
            "    try {\n" +

            "        console.log('+++ js +++ onWindowResize() ')\n" +

            "        if (typeof javascript_obj !== \"undefined\") {\n" +
            "            javascript_obj.onWebPageStateChange('onWindowResize', 'onWindowResize')\n" +
            "        }\n" +
            "    } catch (e) {\n" +
            "        console.log('+++ !!! exception at onWindowResize()s. error: '+e)\n" +
            "    }\n" +
            "});\n"

        wvContent?.evaluateJavascript(
            "(function() { $strJs })();",
            null)
        wvContent?.evaluateJavascript(
            "(function() { try {onWindowResize();} catch (e) { console.log('+++ !!! exception at calling onWindowResize()s. error: '+e) } })();",
            null)
    }
© www.soinside.com 2019 - 2024. All rights reserved.