Post formulaire complexe aspx
Bonjour à tous,
Je suis en train de créer une application permettant d'envoyer des données sur un serveur à l'aide d'un formulaire ASPX.
La page est celle-ci. J'ai donc essayé d'envoyer les données à l'aide de requêtes js mais, étant novice dans le javascript (et même la java), je n'y arrive pas, d'autant plus que certains combobox font rafraîchir la page de manière modifiée.
Voici mon code (m'en voulez pas :aie:)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
| try {
final String userpass = useredit.getText().toString(); //Récupérer l'username
final String passpass = passedit.getText().toString(); //Récupérer le mot de passe
final WebView myWebView = new WebView(MainActivity.this);
WebSettings mWebSettings = myWebView.getSettings();
mWebSettings.setSavePassword(false);
mWebSettings.setSaveFormData(false);
setContentView(myWebView); //only for debugging, to see what happens
dialog.dismiss();
etap = 0; //Pour changer d'étape lors du rafraîchissement de la page
myWebView.setWebViewClient(new WebViewClient() {
@SuppressLint("SetJavaScriptEnabled")
public void onPageFinished(WebView view, String url) {
Log.i("", url);
if(view.getUrl().equals("http://www.geocaching.com/login/default.aspx?redir=/hide/report.aspx") ||
view.getUrl().equals("https://www.geocaching.com/login/default.aspx?redir=/hide/report.aspx")) { //Voir si l'adresse obtenue est bonne (en http comme https)
view.getSettings().setJavaScriptEnabled(true);
view.loadUrl("javascript:document.getElementById('ctl00_ContentBody_tbUsername').value = '"+userpass+"';"); //entrer username
view.loadUrl("javascript:document.getElementById('ctl00_ContentBody_tbPassword').value = '"+passpass+"';"); //entres password
view.loadUrl("javascript:document.getElementById('ctl00_ContentBody_btnSignIn').click();"); //soumettre le formulaire de login
} else if(view.getUrl().equals("http://www.geocaching.com/hide/report.aspx") || view.getUrl().equals("https://www.geocaching.com/hide/report.aspx")) { //si l'adresse est celle du formulaire final, celui où je bloque
view.getSettings().setJavaScriptEnabled(true);
switch(etap) {
case 0:
view.loadUrl("javascript:document.getElementsByName('ctl00$ContentBody$LatLong')[0].value=0;"); //changer la valeur d'un combobox
view.loadUrl("javascript:__doPostBack('ctl00$ContentBody$LatLong','ProcessFormatChange');");
etap++;
break;
case 1:
view.loadUrl("javascript:document.getElementById('ctl00_ContentBody_SelectStateCountryPanel1_ddCountry').selectedIndex = '"+country_TEMP+"';"); //changer la valeur du pays
view.loadUrl("javascript:__doPostBack('ctl00$ContentBody$SelectStateCountryPanel1$ddCountry',''), 0;");
etap++;
break;
case 2:
view.loadUrl("javascript:document.getElementById('ctl00_ContentBody_ddCacheType').selectedIndex = '"+cachetype_TEMP+"';");
view.loadUrl("javascript:document.getElementById('ctl00_ContentBody_ddCacheSize').selectedIndex = '"+cachesize_TEMP+"';");
String cachename_send = cachename_TEMP.replaceAll("'", "\'");
view.loadUrl("javascript:document.getElementById('ctl00_ContentBody_tbNickname').value = '"+cachename_send+"';");
view.loadUrl("javascript:document.getElementById('ctl00_ContentBody_uxDatePlaced').value = '"+date_TEMP+"';");
view.loadUrl("javascript:document.getElementById('ctl00_ContentBody_uxDateFormatLabel').value = 'dd/MM/yy';");
view.loadUrl("javascript:document.getElementById('ctl00_ContentBody_LatLong:_selectNorthSouth').selectedIndex = '"+lat_or_TEMP+"';");
view.loadUrl("javascript:document.getElementById('ctl00_ContentBody_LatLong:_selectEastWest').selectedIndex = '"+lon_or_TEMP+"';");
view.loadUrl("javascript:document.getElementById('ctl00_ContentBody_LatLong__inputLatDegs').value = '"+latitude_TEMP+"';");
view.loadUrl("javascript:document.getElementById('ctl00_ContentBody_LatLong__inputLongDegs').value = '"+longitude_TEMP+"';");
view.loadUrl("javascript:document.getElementById('ctl00_ContentBody_SelectStateCountryPanel1_ddState').selectedIndex = '"+county_TEMP+"';");
view.loadUrl("javascript:document.getElementsByName('ctl00$ContentBody$rblDifficulty')["+starjs(diff_TEMP)+"].checked = true;");
view.loadUrl("javascript:document.getElementsByName('ctl00$ContentBody$rblTerrain')["+starjs(terr_TEMP)+"].checked = true;");
String hint_send = hint_TEMP.replaceAll("'", "\'");
view.loadUrl("javascript:document.getElementById('ctl00_ContentBody_tbHints').value = '"+hint_send+"';");
String reviewernote_send = reviewernote_TEMP.replaceAll("'", "\'");
view.loadUrl("javascript:document.getElementById('ctl00_ContentBody_gsNoteToReviewer').value = '"+reviewernote_send+"';");
view.loadUrl("javascript:document.getElementById('ctl00_ContentBody_chkUnderstand').checked = true;");
view.loadUrl("javascript:document.getElementById('ctl00_ContentBody_chkDisclaimer').checked = true");
view.loadUrl("javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions('ctl00$ContentBody$btnSubmit', '', true, '', '', false, false))"); //soumettre le formulaire (je ne suis pas sûr de bien m'y prendre..)
break;
}
}
}
});
myWebView.loadUrl("http://www.geocaching.com/login/default.aspx?redir=/hide/report.aspx");
} catch(Exception e) {
AlertDialog.Builder myAlertDialog = new AlertDialog.Builder(MainActivity.this);
myAlertDialog.setTitle("Error !");
myAlertDialog.setMessage("Please contact the developer.");
myAlertDialog.setPositiveButton("OK", null);
myAlertDialog.show();
dialog.dismiss();
} |
Mon problème est que je n'arrive pas à prendre la page rafraîchie par le js pour remplir les nouveaux champs..
Voilà, désolé pour le code un peu "brouillon", et si vous pouviez m'aider ça me ferait super plaisir ! Je désespère un peu là..
Merci d'avance ! :)