WebView返回错误的window.innerHeight

Jon*_*Jon 11 javascript android android-webview

我有一个使用Android WebView的应用程序,以及一些JavaScript.当我的WebViewClient调用时onPageFinished(),我会提醒我的JavaScript运行初始化方法.在我点击之前启用并加载了我的JavaScript onPageFinished().

在我使用的JavaScript方法中window.innerWidth.但是,它返回的值总是错误的并且总是相同的.不管我的方向它报告的内部宽度为320,内部高度为240(纵向和横向正确的宽度值分别为360和598).在别的地方我访问window.innerWidthwindow.innerHeight在JavaScript它给了我一个准确的数字.

更令人费解的是,如果我直接在我的onPageFinished()通话中检查WebView的高度或宽度

int height = view.getHeight();

int width = view.getWidth();

然后它总是正确返回(虽然它返回确切的像素数,而不是DIP).这让我觉得一切都已经完成了WebView的加载,因此我的JavaScript不应该有任何问题.

关于发生了什么的任何想法?

提前致谢!

小智 8

这是因为Javascript在WebView的View相关初始化之前执行.Android WebView向JS返回320x240默认值.一段时间后执行你的JS就好了,就像这样

function go() {
int height = view.getHeight();
int width = view.getWidth();
};
window.setTimeout(go, 300);
Run Code Online (Sandbox Code Playgroud)

  • 我的解决方案是检查window.innerWidth == 320 && window.innerHeight == 240,在这种情况下等待100ms然后再试一次. (3认同)