2014-04-19 35 views
1

我正在嘗試將JavaScript注入到我在webview中加載的頁面中。例如,我把一個值到給定的文本框中通過覆蓋「onPageFinished」自定義WebViewClient類中:Android Webview Javascript注入

public class MyAppWebViewClient extends WebViewClient { 

    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     view.loadUrl(url); 
     return true; 
    } 

    @Override 
    public void onPageFinished(WebView view, String url) 
    { 
     super.onPageFinished(view, url); 
     view.loadUrl("javascript:" + 
      "document.getElementById('elid').value = 'texthere';"); 
    } 
} 

瀏覽時的網站,並點擊鏈接,但這個工作正常,當我按下後退按鈕,java/javascript似乎沒有正確執行(文本框沒有正確填寫)

onPageFinished函數在按下後退按鈕時被調用,但它似乎在當前頁面上執行javascript ,而不是在被返回的頁面上。

+0

也見https://stackoverflow.com/q/21552912/32453 – rogerdpack

回答

0

我不知道Android webview的具體細節(我我只是學習他們現在),但是這可能幫助...在一般的Web開發,你可以強制onload事件射擊時通過後退按鈕達到像這樣的頁面:

//This Ensures onLoad() Functions Fire When 
//This Page Is Left & Then Returned To Via The Back Button 
window.onunload = function(){}; 
5

https://github.com/henrychuangtw/Android-Javascript-Injection

步驟1:創建一個類,其通過所謂的javascript

class MyJavaScriptInterface 
{ 
    @JavascriptInterface 
    public void processHTML(String html) 
    { 
     //called by javascript 
    } 
} 


第2步:爲JavaScript

寄存器接口


第3步:插入JavaScript頁面

webview1.setWebViewClient(new WebViewClient() { 
    @Override 
    public void onPageFinished(WebView view, String url) { 
     super.onPageFinished(view, url); 

     StringBuilder sb = new StringBuilder(); 
     sb.append("document.getElementsByTagName('form')[0].onsubmit = function() {"); 
     sb.append("var objPWD, objAccount;var str = '';"); 
     sb.append("var inputs = document.getElementsByTagName('input');"); 
     sb.append("for (var i = 0; i < inputs.length; i++) {"); 
     sb.append("if (inputs[i].type.toLowerCase() === 'password') {objPWD = inputs[i];}"); 
     sb.append("else if (inputs[i].name.toLowerCase() === 'email') {objAccount = inputs[i];}"); 
     sb.append("}"); 
     sb.append("if (objAccount != null) {str += objAccount.value;}"); 
     sb.append("if (objPWD != null) { str += ' , ' + objPWD.value;}"); 
     sb.append("window.MYOBJECT.processHTML(str);"); 
     sb.append("return true;"); 
     sb.append("};"); 

     view.loadUrl("javascript:" + sb.toString()); 
    } 

});