WebView返回错误的window.innerHeight
WebView returns bad window.innerHeight
我有一个使用Android WebView和一些JavaScript的应用程序。当WebViewClient调用onPageFinished()
时,我会提醒JavaScript运行初始化方法。在我点击onPageFinished()
之前,我的JavaScript已经启用并加载。
在这个JavaScript方法中,我使用了window.innerWidth
。但是,它返回的值总是错误的,而且总是相同的。不管我的方向如何,它报告的内部宽度是320,内部高度是240。(纵向和横向的正确宽度值分别为360和598。)在其他任何地方,我用JavaScript访问window.innerWidth
或window.innerHeight
,都会得到一个准确的数字。
更令人困惑的是,如果我使用在onPageFinished()
调用中直接检查WebView的高度或宽度
int height = view.getHeight();
int width = view.getWidth();
则它总是正确返回(尽管它返回的是精确的像素数而不是DIP)。这让我觉得WebView已经完成了所有的加载,所以我的JavaScript应该不会有任何问题。
有什么想法吗?
提前感谢!
这是因为Javascript在WebView的View相关初始化之前执行。安卓WebView会为JS返回一个320x240的默认值。一段时间后执行你的JS是可以的,就像这个
function go() {
int height = view.getHeight();
int width = view.getWidth();
};
window.setTimeout(go, 300);
最后,我使用了webView.getHeight()
和webView.getWidth()
中的值,根据屏幕密度对它们进行了调整,并通过webView.loadUrl()
将它们作为参数传递到javascript方法中。这是我唯一能确定自己得到正确价值观的方法。
按照上面评论中的建议,检查320的宽度和240的高度将非常有效。。。直到你在具有这些精确尺寸的设备上运行。
经过一番阅读,出现了另一个解决方案。在java代码中,我们可以使用
new Handler().post(new Runnable(){
@Override
public void run(){
webview.loadUrl("...")
}
});
将其添加到QueueMessage中,并延迟js的执行,它就工作了。
我使用了这个:
JavaActivity
:中的代码
webView.addJavascriptInterface(new WebAppInterface(this), "Android");
public class WebAppInterface {
Context mContext;
WebAppInterface(Context c) {
mContext = c;
}
public int getWinHeight() {
return webView.getHeight();
}
}
JS代码:
var winHeight = Android.getWinHeight();
- 正在寻找比$(document).ready慢的$(window).load的替代方案
- 直接下载文件,而不是从window.open(url)
- $window.ga在AngularJS事件中未定义
- 如何将PDF作为二进制文件传递到window.open()
- window.onload没有'无法在Android WebView中工作
- window.location替换并传递URL历史记录条目中的变量
- window.on.scroll事件未启动
- WebView返回错误的window.innerHeight
- 尝试使用window.innerHeight和Javascript设置图像高度
- 为什么这个window.innerheight的性能这么差
- 将画布元素的高度和宽度设置为 window.innerHeight/innerWidth 导致滚动条
- window.innerHeight ie8 alternative
- 为什么window.innerHeight在水平方向时返回180
- 如何使 window.innerHeight 在缩放时在移动设备上工作
- 不是“;窗口“;而不是“;window.innerHeight”;但是
- 我可以'无法在IE7上获取window.innerHeight.如何修复
- 设置相对于“window.innerHeight”的高度无效
- window.hasOwnProperty('innerHeight')在Firefox中返回false
- iPhone视口混淆/window.innerHeight
- 错误的窗口.innerWidth和window.innerHeight