我有一个使用Android WebView的应用程序,以及一些JavaScript。当我的WebViewClient调用onPageFinished()
时,我会提醒我的JavaScript运行初始化方法。在点击onPageFinished()
之前,我的JavaScript已启用并加载。
在该JavaScript方法中,我使用了window.innerWidth
。但是,它返回的值总是错误的并且总是相同的。无论我的方向如何,它都会报告内部宽度为320,内部高度为240.(纵向和横向的正确宽度值分别为360和598。)我访问window.innerWidth
或window.innerHeight
的任何其他地方在JavaScript中它给了我一个准确的数字。
更令人费解的是,如果我使用
直接在onPageFinished()
来电中检查WebView的高度或宽度
int height = view.getHeight();
int width = view.getWidth();
然后它总是正确返回(虽然它返回确切的像素数,而不是DIP)。这让我觉得一切都已经完成了WebView的加载,因此我的JavaScript不应该有任何问题。
关于发生了什么的任何想法?
提前致谢!
答案 0 :(得分:8)
这是因为Javascript在WebView的View相关初始化之前执行。 Android WebView向JS返回320x240默认值。 一段时间后执行你的JS就好了,比如这个
function go() {
int height = view.getHeight();
int width = view.getWidth();
};
window.setTimeout(go, 300);
答案 1 :(得分:0)
最后,我使用webView.getHeight()
和webView.getWidth()
中的值,根据屏幕密度调整它们,并通过webView.loadUrl()
将它们作为参数传递到javascript方法中。这是我能确定我获得正确价值的唯一方法。
执行上述评论中建议的内容,检查宽度为320,高度为240将会很有效...直到您在具有这些尺寸的设备上运行。
答案 2 :(得分:0)
经过一些阅读后,又出现了另一种解决方案。在java代码中,我们可以使用
new Handler().post(new Runnable(){
@Override
public void run(){
webview.loadUrl("...")
}
});
将它添加到QueueMessage,并将js延迟执行,并且它可以正常工作。
答案 3 :(得分:0)
我用过这个:
iplus
中的Java 代码:
Activity
...
webView.addJavascriptInterface(new WebAppInterface(this), "Android");
JS 代码:
public class WebAppInterface {
Context mContext;
WebAppInterface(Context c) {
mContext = c;
}
public int getWinHeight() {
return webView.getHeight();
}
}