Изменения в веб-странице через javascript, не отображающиеся в WebView. Есть ли способ заставить WebView перерисовать свой контент?

Вот шаги:

  • Загрузите локальный html-файл с помощью WebView.loadUrl ().
  • Этот локальный html-файл содержит несколько javascript-методов, которые изменяют страницу. Например, добавление изображения или изменение размера текста.
  • Вызовите один из этих методов с помощью WebView.loadUrl («javascript: somefunction ()»);

Это работает отлично. Изменения выглядят хорошо.

Однако, если страница прокручивается во время ее вызова, происходит что-то действительно странное. Вызывается javascript и, глядя на регистрацию, изменения DOM и все пошло так, как ожидалось на этом уровне. Однако WebView не показывает обновление. Если вы затем сделаете что-то, чтобы заставить его перерисовать себя, например, снова поверните устройство или вызовите один из методов javascript (но не прокручивайте это время), наконец, появятся предыдущие изменения.

Таким образом, кажется, что есть какая-то странная ошибка, когда изменения в странице с помощью javascript не обновляются в интерфейсе WebView, если страница была затронута или прокручивается в то время.

Это действительно воспроизводится на Nexus One 2.2, и мы видели его на других устройствах. Кто-нибудь знает, что здесь происходит? Есть ли недействительный метод, который заставляет перерисовывать веб-контент?

Благодарю.

Вот как я заставил свой веб-просмотр обновиться, см. Код по адресу: // 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(); } } } 

Вероятно, это проблема кэширования, у меня была та же проблема и исправлена ​​ее добавлением к настройке webview:

 webview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); webview.getSettings().setAppCacheEnabled(false);