Android中WebView中执行JavaScript获取页面的宽高都是0的问题

最近使用Android中的WebView开发应用,结果在实际使用的时候,前端开发的网页展现的时候,总是什么都看不到,结果跟踪分析发现,页面在加载完成后,就去获取页面的宽高,然后根据页面的宽高进行页面的渲染,但是页面加载完成后JavaScript中得到的页面的宽高都是0,结果就导致整个的页面被渲染成了空页面。

项目是使用一个Dialog里面嵌入WebView的方式进行处理的,当网页加载完成之前,是不显示出来的,只有当网页加载完成后,页面才会展现出来。

实际的情况是,如果先展示Dialog,等整个Dialog已经完全展现出来之后,再去加载页面,这个时候,JavaScript代码是可以获取到正确的宽高的。但是,如果先加载页面,然后等待页面的加载完成通知,再去显示页面的时候,这个时候,由于Dialog还没有显示出来,此时内嵌的WebView并没有得到实际的宽度高度,因此只能获得到0。

示例工程的代码如下:

布局文件layout_webview.xml

对话框代码WebViewDialog.java

主界面代码MainActivity.java

主界面布局文件activity_main.xml

完整运行整个例子,会发现最后输出的屏幕的宽高信息都是0。

这个问题发生的原因是由于界面在页面加载之后才会显示,由于页面还没有显示,因此从JavaScript中获取页面的大小的时候,只能获取到0.

这个问题如果要求页面解决的话,那么编写网页的开发人员,只要监听window.onsize事件即可。

如果要求WebView的开发者来解决的话,则其解决方式如下:

1.修改WebViewDialog初始化网页时候的策略,初始化时候禁止JavaScript执行。WebViewDialog构造函数中的mWebView.getSettings().setJavaScriptEnabled(true);调整成mWebView.getSettings().setJavaScriptEnabled(false);

2.页面加载逻辑照旧执行。

3.实现DialogonAttachedToWindow函数,在这个函数中重新加载数据

最终的WebViewDialog.Java的代码如下:

发布者

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注