我正在将 file://url 加载到 web View 中。由于我的 webview 需要展开/折叠,因此我没有使用 WRAP_CONTENT,而是在 android 中的 javascript onPageFinished 事件中计算高度。但每 5 次中就有 2 次,javascript 会报告错误的高度。对于某些手机,它返回更大的高度,而对于较旧的低分辨率手机,它返回比容器更小的高度。
我尝试过使用window.onload。为了保持前面的理智,我必须在 1500 毫秒后执行 setTimeout() 来重新计算高度并调整 webview 容器的大小。
我有什么遗漏的吗?如何着手修复它?
最佳答案
尝试依赖 Android WebView,而不是 HTML 窗口内
Html 窗口(在 JavaScript 运行时执行时)为 320x240 或正确的大小
如果您无法直接访问 WebView 大小,请暂停相关 JavaScript,直到 HTML 窗口调整大小
使用 HTML 窗口加载 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);
}
}
关于javascript - Android Webview onLoad 返回错误的高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28404318/