2012-04-17 11 views
12

Próbuję wypełnić formularze z widoku Web w systemie Android. Już uznał ten kawałek kodu tutaj: Fill fields in webview automaticallyFormularz wypełnienia w WebView z Javascriptem

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

Niestety ja nie rozumiem, gdzie muszę otworzyć stronę chcę wypełnić

setContentView(R.layout.web); 
final WebView mWebView = (WebView) findViewById(R.id.webview); 
mWebView.getSettings().setJavaScriptEnabled(true); 
mWebView.loadUrl(url); 
String user="u"; 
String pwd="p"; 
mWebView.loadUrl("javascript:document.getElementById('username').value = '"+user+"';document.getElementById('password').value='"+pwd+"';"); 

Kiedy próbuję to w ten sposób. strona zostanie wyświetlona, ​​ale bez żadnych wartości w formularzach.

Dzięki z góry za pomoc

+0

hej. czy możesz odwołać się do dowolnego pełnego przykładu. Nie pracowałem wcześniej z tego rodzaju kodem. –

+0

To działało dla mnie [Przepisz wiele danych w WebView przy użyciu javascript] (https://stackoverflow.com/a/48349575/8018480) –

Odpowiedz

19

Należy wypełnić wartości po stronie został załadowany. To jest przykład przy użyciu twojego kodu:

mWebView.loadUrl(url); 
mWebView.getSettings().setJavaScriptEnabled(true); 
mWebView.setWebViewClient(new WebViewClient() { 
    public void onPageFinished(WebView view, String url) { 
     String user="u"; 
     String pwd="p"; 
     view.loadUrl("javascript:document.getElementById('username').value = '"+user+"';document.getElementById('password').value='"+pwd+"';"); 
    } 
}); 
+0

Próbowałem przy użyciu strony code.web jest ładowanie, ale pola nie są wypełnione przez te dane .it jest pusty. Czy możesz powiedzieć, jak napisać kod javascript dla tego. – user1213202

+0

Możesz mieć inną nazwę dla elementu "nazwa użytkownika" lub "hasło". Powinieneś zastąpić te nazwy rzeczywistymi nazwami pól swojej strony internetowej. – gnpaolo

+0

hej. czy możesz odwołać się do dowolnego pełnego przykładu. Nie pracowałem wcześniej z tego rodzaju kodem. –

0

Miałem ten sam problem i po zastosowaniu różnych wyjaśnień na temat StackOverflow, udało mi się sprawić, że moje działa.

tutaj jest moje podejście

webView.loadUrl(url); 
     webView.getSettings().setDomStorageEnabled(true); 
     webView.setWebViewClient(new WebViewClient(){ 
      public void onPageFinished(WebView view, String url) { 
       String email="[email protected]"; 

       //view.loadUrl("javascript:document.getElementById('email').value = '"+email+"'"); 
       view.loadUrl("javascript:document.forms[0].email.value = '"+email+"';"); 
       Log.d("email", "can not add email"); 
      } 
     }); 

2 rzeczy: 1) trzeba dodać tę linię webView.getSettings().setDomStorageEnabled(true); (odniesienie: Android WebView always returns null for javascript getElementById on loadUrl)

2) trzeba uzyskać dostęp do zmiennej w kodzie php przez używając tego view.loadUrl("javascript:document.forms[0].email.value = '"+email+"';"); jak widać w moim kodzie użyłem rozwiązania zaproponowanego przez @gnpaolo, ale nie działało ono dla mnie, więc skomentowałem to i używam tego. (odniesienie: How to inject a String into Android WebView)

Wreszcie, po prostu chcę dodać, że nie trzeba tworzyć specjalnego javascript.

jedna rzeczą forms[0] jest pozycja zmiennej w postaci php, aw moim przypadku, mam e-mail użytkownika, więc napisałem view.loadUrl("javascript:document.forms[0].email.value = '"+email+"';");

Hope, to może pomóc innym.

16

Android 4.4 nowy WebView ma problem z użyciem metody loadUrl("javascript:"), ciąg parametrów będzie dekodowany przez adres URL przed wykonaniem. Możesz spróbować użyć funkcji evaluateJavascript() dla API> = 19 i loadUrl() dla interfejsu API < 19. Poniższy kod działa dla mnie.

mWebView.loadUrl(url) 
    WebSettings settings = mWebView.getSettings(); 
    settings.setJavaScriptEnabled(true); 

    String js = "javascript:document.getElementById('username').value = '"+user+"';document.getElementById('password').value='"+pwd+"';"; 
    mWebView.setWebViewClient(new WebViewClient() { 

     @Override 
     public void onPageFinished(WebView view, String url) { 
      super.onPageFinished(view, url); 

      if (Build.VERSION.SDK_INT >= 19) { 
       view.evaluateJavascript(js, new ValueCallback<String>() { 
        @Override 
        public void onReceiveValue(String s) { 

        } 
       }); 
      } else { 
       view.loadUrl(js); 
      } 
     }); 
    } 

patrz: loadUrl("javascript:....") behaviour changed incompatibly in Android 4.4

+0

Proszę rozważyć edycję swojego wpisu, aby dodać więcej wyjaśnień na temat tego, co robi twój kod i dlaczego to rozwiąże problem. Odpowiedź, która najczęściej zawiera kod (nawet jeśli działa) zazwyczaj nie pomoże OP zrozumieć ich problemu. – SuperBiasedMan

+0

@ can Czy mogę uzyskać odpowiedź ajax po wysłaniu danych formularza? formularz wyświetlania strony internetowej w widoku z sieci ze zdalnego adresu URL –

+0

Świetnie! Ta odpowiedź jest bardziej poprawna od 2015)) – micsha123

0

Wystarczy włączyć DomStorage i napisać "var x =" ciąg:

webview.getSettings().setJavaScriptEnabled(true); 
web.getSettings().setDomStorageEnabled(true); 

webview.loadUrl(urlString); 
webview.setWebViewClient(new WebViewClient(){ 

public void onPageFinished(WebView view, String url){ 
super.onPageFinished(view, url); 
String js = "javascript:var x=document.getElementById('username').value = '"+user+"';var y=document.getElementById('password').value='"+pass+"';"; 

if (Build.VERSION.SDK_INT >= 19) { 
     view.evaluateJavascript(js, new ValueCallback<String>() { 
      @Override 
      public void onReceiveValue(String s) { 

      } 
     }); 
    } else { 
     view.loadUrl(js); 
    } 

view.loadUrl(js); 
} 
}); 
Powiązane problemy