Android Webview onLoad返回错误的高度

时间:2015-02-09 06:56:00

标签: javascript android webview

我正在将一个file:// url加载到webview中。由于我的webview需要扩展/折叠,我不是在使用WRAP_CONTENT,而是在android中的javascript onPageFinished事件中计算高度。但每2次出5次,javascript报告错误的高度。对于某些手机,它会返回更大的高度,而对于较旧的低分辨率手机,它会返回比容器更小的高度。

我试过使用window.onload。为了保持前面的理智,我必须在1500ms之后执行setTimeout()以重新计算高度并调整webview容器的大小。

我缺少什么?怎么去修理它?

1 个答案:

答案 0 :(得分:0)

尝试依赖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);
    }
}