Изменения на веб-странице через JavaScript не отображаются в WebView.Есть ли способ заставить WebView перерисовать его содержимое? - PullRequest
4 голосов
/ 03 марта 2011

Вот шаги:

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

Это работает просто отлично. Изменения хорошо отображаются.

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

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

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

Спасибо.

Ответы [ 2 ]

0 голосов
/ 10 июня 2016

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

webview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
webview.getSettings().setAppCacheEnabled(false);
0 голосов
/ 27 августа 2013

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