【问题标题】:Android Webview onLoad returns wrong heightAndroid Webview onLoad 返回错误的高度
【发布时间】:2015-02-09 06:56:00
【问题描述】:
我正在将一个 file:// url 加载到 webview 中。由于我的 webview 需要展开/折叠,所以我没有使用 WRAP_CONTENT,而是在 android 中计算 javascript onPageFinished 事件中的高度。但是每 2 次 5 次,javascript 报告一个错误的高度。对于某些手机,它返回更大的高度,而对于较旧的低分辨率手机,它返回的高度小于容器。
我尝试过使用 window.onload。只是为了在前面保持理智,我必须在 1500 毫秒后执行 setTimeout() 来重新计算高度并调整 webview 容器的大小。
我缺少什么吗?如何着手修复它?
【问题讨论】:
标签:
javascript
android
webview
【解决方案1】:
尽量依赖Android的WebView,而不是HTML Window里面
Html 窗口(在 JavaScript 运行时执行时)为 320x240 或正确大小
如果您无法直接访问您的 WebView 大小,请推迟相关 JavaScript 直到 HTML 窗口调整大小
使用 HTML Window 加载 SDK 视频覆盖的示例代码
if (!isAndroid() || isAndroidAndResized()) {
this.translateRelativePosition(params);
loadVideo(params.id, params.url, params);
} else {
var relativePosition = {left: params.left, top: params.top};
var offScreenPosition = {
left: params.left - params.width - 2000,
top: params.top - params.height - 2000
}; // preload video without showing splash overlay at (0, 0)
params.left = offScreenPosition.left;
params.top = offScreenPosition.top;
loadVideo(params.id, params.url, params);
var positionCachedVideo = function () {
if (isAndroidAndResized() || Ad.width === 320 && Ad.height === 240) {
params.left = relativePosition.left;
params.top = relativePosition.top;
this.translateRelativePosition(params); // use container absolute position + video relative position (for device overlay)
playVideo(params.id, params);
} // make sure WebView is not 320x240 unless Ad size is 320x240
}.bind(this);
if (this.getWidth() !== 320 || this.getHeight() !== 240) {
targetHtmlWindow.addEventListener('resize', positionCachedVideo);
} else {
setTimeout(positionCachedVideo, 50);
}
}