有一个webview,当webview中的内容变化时,需要重新定位一些覆盖。
一种方法是在加载的html中监听 "resize"。
function onWindowResize(){
// notify native side
android.onWebPageStateChange('onWindowResize', data)
}
window.addEventListener("resize", onWindowResize);
并在webview的@JavascriptInterface函数中使用。onWebPageStateChange
它应该知道webview内容大小的变化。
然而,如果javascript不是一个选项(由于任何原因),是否有一个等价的事件在webview本身,所以它可以捕捉到webview内容的大小变化?
似乎这样做不需要在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)
}