通过javascript更改网页不会出现在WebView中。有没有办法强制WebView重绘其内容?

时间:2011-03-03 06:37:27

标签: javascript android webview

以下是涉及的步骤:

  • 使用WebView.loadUrl()加载本地html文件。
  • 这个本地html文件有几个修改页面的javascript方法。例如添加图像或更改文本大小。
  • 使用WebView.loadUrl调用其中一种方法(“javascript:somefunction()”);

这很好用。这些变化很好地显示出来。

但是,如果在调用页面时滚动页面,则会发生一些非常奇怪的事情。调用javascript,通过查看日志记录,DOM会发生变化,一切都按照预期在该级别上进行。但是,WebView不显示更新。如果你然后做了一些强迫它重绘的事情,比如旋转设备或再次调用其中一个javascript方法(但这次不滚动),最后会出现以前的更改。

所以似乎有一些奇怪的错误,如果当时正在触摸或滚动页面,则在WebView UI中不会更新页面对页面的更改。

这在Nexus One 2.2上真的可以重现,我们已经在其他设备上看到了它。有谁知道这里发生了什么?是否存在强制重新绘制Web内容的无效方法?

感谢。

2 个答案:

答案 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);