Udfyld felterne i webview automatisk

Jeg har set dette spørgsmål flydende omkring internettet, men jeg har ikke fundet en fungerende løsning endnu. Dybest set, jeg ønsker at indlæse min app, og tryk på a-knappen; den knap handling vil derefter udfylde brugernavn og adgangskode i en hjemmeside, der allerede er lagt i webview (eller vente, til onPageFinished). Endelig, på send-knappen på login-siden vil blive aktiveret.

Fra hvad jeg forstår, at dette kan gøres ved at lave en java-injektion med loadUrl(javascript), men jeg ved ikke, hvad de java-kommandoer ville være at udfylde felterne. De samme spørgsmål blev stillet til iOS, men kommandoer er lidt anderledes.

Er det muligt at gøre det, jeg beder med javascript i en webivew, eller er jeg nødt til at gøre en http-post uden et webview som dette eller dette?

Tak for enhver hjælp, du kan give!

OriginalForfatteren user1022934 | 2011-11-01

6 svar

  1. 19

    Du behøver ikke at bruge “java-kommandoer”… men i stedet JavaScript… for eksempel:

    String username = "cristian";
    webview.loadUrl("javascript:document.getElementById('username').value = '"+username+"';");

    Så dybest set, hvad du har at gøre, er en stor perlerække af JavaScript-kode, som vil få disse felter og sætte værdier på dem; du kan også aktivere/deaktivere send-knappen fra JavaScript.

    Tak for dit svar. Jeg er nu i stand til at udfylde brugernavn og adgangskode felterne, men kan ikke få login-knappen for at aktivere. Så vidt jeg har prøvet “dokument.getElementById (“send”).deaktiveret = false” og “dokument.loginForm.send.deaktiveret = false” og “dokument.former[‘loginForm’].send ()”, men ingen af dem har virket. Nogen idé om, hvorfor de ikke? Tak.
    Spørg i en Javascript-forum XD jeg faktisk ikke ved ret meget om JS
    hey . kan du henvise til en fuld eksempel. Jeg har ikke arbejdet med denne form for kode før .
    se venligst på dette spørgsmål – stackoverflow.com/questions/37644551/… . det er virkelig behov for hjælp .
    hej, ved du, hvorfor det ikke fungerer? pastebin.com/fV9NiSNy Google-søgefeltet bliver aldrig fyldt

    OriginalForfatteren Cristian

  2. 28

    Tak til alle for jeres svar, det hjalp mig, men ikke arbejde.

    Det var altid åbne en hvid side, indtil jeg fandt denne :

    https://stackoverflow.com/a/25606090/3204928

    Så her komplet løsning, til at blande alle infos fundet her og der :

    1) først og fremmest er du nødt til at aktivere DOM opbevaring, hvis du ikke gør det, .GetElementByXXX vil returnere noget (du er nødt til at gøre det før indlæser siden)

    myWebView.getSettings().setDomStorageEnabled(true);

    2)Din sidste Javascript-kald på GetElementByXXX SKAL gemme resultatet i en variabel

    Eksempel 1 :

    _webview.loadUrl("javascript:var uselessvar =document.getElementById('passwordfield').value='"+password+"';");

    her kun et opkald (kun et semi-kolon), så vi altid kan gemme resultatet i ‘uselessvar’

    Eksempel 2 : se user802467 svar

    her er der 3 opkald (et login felt, en for password-feltet, en til knappen send), kun det seneste opkald nødt til at være store, er det gjort i ‘frms’

    Javascript programmører bør nemt kunne forklare denne adfærd.

    håber, at dette vil hjælpe

    Jeg havde ikke downvote dig, men jeg formoder det downvote var foranlediget af dette: “Tak til alle for jeres svar, det hjalp mig, men ikke arbejde.” Det lyder som om, at dette svar er en “me too” – svar.
    se venligst dette , stackoverflow.com/questions/37644551/… . det er virkelig behov for hjælp.
    Dette svar virker i alle tilfælde af javascript injektion i Webview. Derfor bør det være markeret som korrekte.
    Dette bør være accepteret svar, jeg fik en blank skærm uden ubrugelige variabel og dom opbevaring aktiveret.
    hej, ved du, hvorfor det ikke fungerer? pastebin.com/fV9NiSNy Google søgefeltet aldrig bliver fyldt

    OriginalForfatteren Giova

  3. 18

    Det virkede for mig til at udfylde skemaet værdier og indsender formularen:

    webView.loadUrl("javascript: {" +
                "document.getElementById('username').value = '"+uname +"';" +
                "document.getElementById('password').value = '"+password+"';" +
                "var frms = document.getElementsByName('loginForm');" +
                "frms[0].submit(); };");
    ok, men hvis du ikke kender id ‘ et af felterne?

    OriginalForfatteren user802467

  4. 9

    Her er komplet kode, der fungerer for mig (Bitbucket):

    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setDomStorageEnabled(true);
    webView.loadUrl("http://example.com/");
    webView.setWebViewClient(new WebViewClient(){
    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
    
        final String password = "password";
        final String username = "username";
        final String answer = 5;
    
        final String js = "javascript:" +
                "document.getElementById('password').value = '" + password + "';"  +
                "document.getElementById('username').value = '" + username + "';"  +
                "var ans = document.getElementsByName('answer');"                  +
                "ans[0].value = '" + answer + "';"                                 +
                "document.getElementById('fl').click()";
    
        if (Build.VERSION.SDK_INT >= 19) {
            view.evaluateJavascript(js, new ValueCallback<String>() {
                @Override
                public void onReceiveValue(String s) {
    
                }
            });
        } else {
            view.loadUrl(js);
        }
    }

    });

    OriginalForfatteren Viktor Apoyan

  5. 0

    Jeg prøvede @user802467 løsning.Men der var en anden adfærd i 2 ting

    1. Hvis jeg gemt det er KUN de sidste javascript-kald i en variabel, var det ikke at udfylde felterne. I stedet, hvis jeg gemt alle de tre opkald i variabler, det gjorde
    2. For nogle grund til at min form ikke var blevet indsendt ved hjælp af send(). Men i stedet for at indsende skemaet, hvis jeg klikkede på send-knappen ved hjælp af knappen.klik på(), jeg didnot nødt til at gemme alle de tre opkald, og alt fungerede perfekt!

    Her er hvad jeg brugte (men virkede ikke)

    view.loadUrl("javascript: var x = document.getElementById('username').value = '" + username + "';" +
                            "var y = document.getElementById('password').value = '" + password + "';" +
                            "var form1 = document.getElementById('loginform');" +
                            "form1[0].submit(); ");

    Her er den kode, der arbejdede for mig

    view.loadUrl("javascript:  document.getElementById('username').value = '" + username + "';" +
                               " document.getElementById('password').value = '" + password + "';" +
                               "var z = document.getElementById('submitbutton').click();"
               );

    OriginalForfatteren user5434084

  6. 0

    Det virker for mig

    webView.loadUrl("javascript:var uselessvar =document.getElementById('regno').value='"+mob+"';",null);
    webView.loadUrl("javascript:var uselessvar =document.getElementById('passwd').value='"+pass+"';",null);

    OriginalForfatteren Eliter

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *