Android WebView插入JavaScript

來源:互聯網
上載者:User

標籤:android   style   blog   http   io   os   ar   java   sp   

有這樣的需求,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=";  
  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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.