11

我有一个使用 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 不应该有任何问题。

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

提前致谢!

4

4 回答 4

8

这是因为 Javascript 在 WebView 的 View 相关初始化之前执行。并且 Android WebView 返回一个 320x240 的默认值给 JS。一段时间后执行你的JS就可以了,像这样

function go() {
int height = view.getHeight();
int width = view.getWidth();
};
window.setTimeout(go, 300);
于 2012-09-26T05:19:28.707 回答
0

最后,我使用了webView.getHeight()和中的值webView.getWidth(),根据屏幕密度调整了它们,并将它们作为参数传递到 javascript 方法中webView.loadUrl()。这是我可以确定我得到正确值的唯一方法。

执行上面评论中建议的操作,检查 320 的宽度和 240 的高度会很好......直到您在具有这些精确尺寸的设备上运行。

于 2014-06-09T13:04:48.827 回答
0

我用这个:

中的Java代码Activity

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();
于 2016-03-21T18:20:05.557 回答
0

经过一番阅读,出现了另一种解决方案。在java代码中,我们可以使用

new Handler().post(new Runnable(){ 
    @Override 
    public void run(){
        webview.loadUrl("...")
    }
}); 

将其添加到QueueMessage,并延迟js执行,它可以工作。

于 2015-09-28T08:04:12.543 回答