2014-04-19 31 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()); 
    } 

});