2016-07-27 8 views
1

Ich habe ein Webview, das this website öffnet. Wie wir sehen können, hat es ein Eingabefeld. Ich möchte dieses Eingabefeld automatisch mit meinen Daten füllen und auf den Absenden-Button klicken. Hier ist, was ich für AutoFill versuche, aber es funktioniert nicht.Autofill Webview Formular

public class WebViewActivity extends AppCompatActivity { 
    private WebView webView; 
    String url = "http://www.indianrail.gov.in/pnr_Enq.html", pnrNumber = ""; 
    ProgressBar pb; 
    Toolbar toolbar; 
    private Tracker mTracker; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_website); 

     init(); 
    } 

    private void init() { 


     pnrNumber = getIntent().getStringExtra("pnrNumber"); 

     pb = (ProgressBar) findViewById(R.id.progressBar); 
     pb.getProgressDrawable().setColorFilter(ContextCompat.getColor(this, R.color.White), PorterDuff.Mode.SRC_IN); 

     webView = (WebView) findViewById(R.id.webView); 

     this.webView.setWebViewClient(new WebViewClient()); 
     webView.getSettings().setJavaScriptEnabled(true); 
     webView.getSettings().setSupportZoom(true); 
     webView.getSettings().setBuiltInZoomControls(true); 

     webView.getSettings().setSupportMultipleWindows(false); 
     webView.getSettings().setDomStorageEnabled(true); 

     webView.loadUrl(url); 

     webView.setWebChromeClient(new WebChromeClient() { 
      public void onProgressChanged(WebView view, int progress) { 
       pb.setProgress(progress); 
       if (progress == 100) { 
        pb.setProgress(0); 
       } 
      } 
     }); 

     webView.setWebViewClient(new WebViewClient() { 
      @Override 
      public boolean shouldOverrideUrlLoading(WebView v, String url) { 
       v.loadUrl(url); 
       return true; 
      } 

      @Override 
      public void onPageFinished(WebView v, String url) { 
       v.loadUrl("javascript:document.forms[0].lccp_pnrno1.value = '"+pnrNumber+"';"); 
      } 
     }); 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     mTracker.setScreenName("WebView Fragment with " + url); 
     mTracker.send(new HitBuilders.ScreenViewBuilder().build()); 

    } 

    @Override 
    public void onPause() { 
     // TODO Auto-generated method stub 
     super.onPause(); 
     webView.stopLoading(); 
    } 

    @Override 
    public void onStop() { 
     super.onStop(); 
     // The rest of your onStop() code. 
     webView.stopLoading(); 
    } 
} 

Fehle ich etwas.?

Antwort

1

Wenn Sie es automatisch ausfüllen und direkt absenden möchten, warum senden Sie nicht einfach eine POST-Anfrage direkt an diese Seite, um den gewünschten Inhalt zu erhalten?

Alles was du tun musst, ist auf dieser Seite eine POST-Anforderung tun:

http://www.indianrail.gov.in/cgi_bin/inet_pnstat_cgi_8238.cgi

Mit POST-Daten: lccp_cap_value, lccp_capinp_value, lccp_pnrno1

Der pnrno1 ist der von Ihnen eingegebene Wert Dort. Die Cap-Wert und Capinp-Werte für mich sind 24357. Überprüfen Sie, dass sie für Sie auch gleich sind. Nicht sicher, ob sie dynamisch oder statisch sind.

Ansonsten denke ich, dass es nicht möglich ist, dies zu erreichen, ohne eine Art von externen JavaScript-Datei anhängen. Aber die POST-Lösung sollte funktionieren (wenn die Cap- und Capinp-Werte nicht dynamisch sind).

+0

Wie haben Sie die lccp_cap_value und lccp_capinp_value überprüft? Auch da ich die Anfrage von einer App mit verschiedenen PNRs senden werde, wird es mit den gleichen Werten arbeiten. – Akshat

+0

Ich habe es überprüft, indem ich die HTML-Quelle Ihrer gegebenen Webseite überprüft habe. In Zeile 618 und 619 sind die Cap- und Capinp-Werte angegeben. Und ja, Sie können versuchen, die Cap- und Capinp-Werte statisch zu belassen (24357) und nur den pnrno1-Wert ändern. Das hat für mich funktioniert. – Janno

+0

http://i.imgur.com/wY2lzyV.png – Janno