首页 > 代码库 > Android WebView插入JavaScript

Android WebView插入JavaScript

有这样的需求,webview从网上加载一些网页,是别人的网页,我们只需要网页中的一部分数据,但是不可能叫别人修改了网页,所以只有自己动手,一种方法是自己把网页当字符串取到,分析修改后加入webview显示,但是这方法似乎有点麻烦。

讲另外的思路,网页的数据是固定的,直接把网页url丢进webview加载,但是没看到有webview方法可以截获掉的,不过可以往网页中插入一些javascript来屏蔽不需要显示的内容。

例子:用百度网页转换http://gate.baidu.com/ 取到的网页,活生生被百度在前面和后面各插入了一个div,很讨厌这样,所以要把它并比掉,前面的div叫class="trans",后面是class="footer"。我们需要的是在网页插入javascript,把这两个div设为不可见。代码如下:


[java] view plaincopy
  1. public class Test {  
  2.   
  3.     private static final String BAIDU_URL = "http://gate.baidu.com/tc?from=opentc&src="http://www.mamicode.com/;
  4.   
  5.     private String willLoadUrl = "http://www.google.com.hk";  
  6.   
  7.     private WebView webView;  
  8.   
  9.     //这是要注入的javascript,注意:前面的“javascript:”是必须的,后面就是要注入的语句  
  10.     private static final String insertJavaScript = "javascript:window.onload=function(){ document.getElementsByClassName(‘footer‘)[0].style.display=‘none‘; document.getElementsByClassName(‘trans‘)[0].style.display=‘none‘;}";  
  11.   
  12.     @Override  
  13.     public void onCreate(Bundle savedInstanceState) {  
  14.         super.onCreate(savedInstanceState);  
  15.         setContentView(R.layout.testlistview);  
  16.   
  17.         webView = (WebView) findViewById(R.id.webview);  
  18.   
  19.         //先启用JavaScript  
  20.         webView.getSettings().setJavaScriptEnabled(true);  
  21.   
  22.         //webview中需要注入javascript屏蔽百度的头和尾部。设置WebViewClient  
  23.         webView.setWebViewClient(new myWebViewClient());  
  24.   
  25.         //这是加载网页的URL,真正的网页  
  26.         loadWebpage(BAIDU_URL);  
  27.     }  
  28.   
  29.     private void loadWebpage(String url) {  
  30.         webView.loadUrl(url);  
  31.     }  
  32.   
  33.   
  34.     /** 
  35.      * 经过测试,在onPageFinished中注入脚本有时候不能调用JavaScript。在onPageStarted注入才可以。 
  36.      */  
  37.     public class myWebViewClient extends WebViewClient {  
  38.   
  39.         @Override  
  40.         public void onPageFinished(WebView view, String url) {  
  41.             super.onPageFinished(view, url);  
  42.             Log.d("hehe", "onPageFinished execute");  
  43.         }  
  44.   
  45.         @Override  
  46.         public void onPageStarted(WebView view, String url, Bitmap favicon) {  
  47.             super.onPageStarted(view, url, favicon);  
  48.             //注入  
  49.             view.loadUrl(insertJavaScript);  
  50.             Log.d("hehe", "onPageStarted execute");  
  51.         }  
  52.     }  
  53. }  


网上很多都是在OnpageFinished的时候注入,但是有时候失效,不知道为什么,所以改成了onPageStarted

Android WebView插入JavaScript