以下是涉及的步骤:
这很好用。这些变化很好地显示出来。
但是,如果在调用页面时滚动页面,则会发生一些非常奇怪的事情。调用javascript,通过查看日志记录,DOM会发生变化,一切都按照预期在该级别上进行。但是,WebView不显示更新。如果你然后做了一些强迫它重绘的事情,比如旋转设备或再次调用其中一个javascript方法(但这次不滚动),最后会出现以前的更改。
所以似乎有一些奇怪的错误,如果当时正在触摸或滚动页面,则在WebView UI中不会更新页面对页面的更改。
这在Nexus One 2.2上真的可以重现,我们已经在其他设备上看到了它。有谁知道这里发生了什么?是否存在强制重新绘制Web内容的无效方法?
感谢。
答案 0 :(得分:0)
以下是我强制我的webview更新的方法,请参阅以下代码:// WEBVIEW
package com.example.scroll;
// philip r brenan at gmail.com, www.appaapps.com
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.webkit.WebView;
public class MainActivity extends Activity
{protected void onCreate(Bundle savedInstanceState)
{super.onCreate(savedInstanceState);
setContentView(new MyWebView(this));
}
class MyWebView extends WebView
{MyWebView(Context Context)
{super(Context);
getSettings().setJavaScriptEnabled(true);
addJavascriptInterface(this, "Android");
new Thread()
{public void run()
{for(int j = 0; j < 100; ++j)
{post(new Runnable()
{public void run()
{loadData(content(), "text/html", "utf-8"); // Display in browser
}
});
try {Thread.sleep(5000);} catch(Exception e) {}
}
}
}.start();
}
int c = 0, C = 1;
String content()
{final StringBuilder s = new StringBuilder();
//s.append("<html id="+(C++)+"><body>"); // WEBVIEW REFRESHES CORRECTLY ***************
s.append("<html><body>"); // WEBVIEW DOES NOT REFRESH ******************
s.append("<h1 id=11>1111</h1>");
s.append("<script>location.href = '#22';</script>");
for(int i = 0; i < 10; ++i) s.append("<p>"+c+c+c); ++c;
s.append("<h1 id=22>2222</h1>");
for(int i = 0; i < 10; ++i) s.append("<p>"+c+c+c); ++c;
Log.e("AAAAAA", "content="+s.toString());
s.append("</body></html>");
return s.toString();
}
}
}
答案 1 :(得分:0)
这可能是一个缓存问题,我遇到了同样的问题并通过将其添加到webview的设置中来修复它:
webview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
webview.getSettings().setAppCacheEnabled(false);