2012-01-21 5 views
4

Так, чтение вокруг я прочитал, что я мог «впрыснуть» JavaScript в загруженной странице, чтобы программно заполнить форму веб-сайта, поэтому я попытался следующее:Использование Javascript в WebView

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    WebView WebView; 
    WebView = (WebView) findViewById(R.id.webview); 
    WebView.setWebViewClient(new HelloWebViewClient()); 
    WebView.getSettings().setJavaScriptEnabled(true); 
    WebView.getSettings().setBlockNetworkImage(false); 
    WebView.loadUrl("http://www.kingsage.es"); 
    String username = "XXX"; 
    String Password = "YYY"; 
    WebView.loadUrl("javascript:document.getElementById('login_player').value='"+username+"';javascript:document.getElementById('login_passwd').value = '"+Password+"';"); 
} 

Однако, когда я запускаю это на эмуляторе я получаю ошибку, как будто сайт не найден. если я отключу второй метод loadUrl, я загружаю веб-сайт, но мне нужно заполнить форму входа программно !, я полагаю, что я делаю что-то неправильно, но я не нашел и не стал читать. Любая помощь будет оценена!

+0

это даже показывает веб-сайт для начала? www.google.com попробуйте и посмотрите, не появилось ли оно. – JoxTraex

+0

Помогло ли мое решение? – JeanLuc

ответ

6

вам нужно подождать, пока не будет загружен веб-страницы (используйте WebViewClient), а затем выполнить ваш Javascript

webView.setWebViewClient(new WebViewClient(){ 
    @Override 
    public void onPageFinished (WebView webView, String url) 
    { 
     webView.loadUrl("javascript:document.getElementById('login_player').value='"+username+"';javascript:document.getElementById('login_passwd').value = '"+Password+"';"); 
    } 
}); 

Кроме того, убедитесь, что вы выполняете только один раз, а не на каждом onPageFinished Event

+0

нужна помощь! http://stackoverflow.com/questions/33249207/android-webview-auto-sign-in – Juni

1

Мне нравится предложение Жан-Люк в и это работало для меня 98% пути. Мне все еще нужно было автоматически регистрировать пользователя на веб-странице после ввода имени пользователя и пароля, поэтому я сделал следующее и хорошо сработал, за исключением попытки удалить сообщение «Вы хотите запомнить пароль».

@Override 
      public void onPageFinished (WebView webView, String url) 
      { 
        webView.loadUrl("javascript:document.getElementById('Login1_UserName').value='"+userName+"';javascript:document.getElementById('Login1_Password').value = '"+password+"';"); 
        webView.loadUrl("javascript:document.getElementById('Login1_LoginButton').click();"); 
      } 

Вторая линия, выбранная кнопка «войти» и войти их в автоматическом режиме. Надеюсь, что это помогает кто-то еще.

+0

Могу ли я применить тот же код на веб-сайте, который у меня нет? нужен срочный ответ ... потому что у меня проблемы – Juni

+0

этот код для веб-сайта У меня нет никакого контроля над. Поэтому, если я понял ваш вопрос, тогда ответ «Да». – timv

+0

Я только что заменил некоторые значения и реализовал на моей странице, но не делает то, что хочу ... я думаю, что я shud поставил еще один вопрос – Juni

0

Вот как я дружнее это в моем случае, когда я должен был просмотреть страницу, заполнить текстовые поля и

WebView webView = FindViewById<WebView>(Resource.Id.webEspView); 
webView.SetWebViewClient(new Client()); 
webView.Settings.JavaScriptEnabled = true; 
webView.LoadUrl("http://192.168.4.1") 

Затем добавьте класс Client и перегруженный метод onPageFinished().

public class Client : WebViewClient 
{ 
    public override void OnPageFinished(WebView view, string url) 
    { 
     base.OnPageFinished(view, url); 
     string ssid = Variables.GetInitialUsername();   
     ssid = ssid.Trim(new char[] {'\"'}); 
     string pass = Variables.GetInitialPassword(); 

     var script = $"document.getElementById(\"clientId\").value = \"{ssid}\";" + 
        $"document.getElementById(\"branchId\").value = \"{pass}\";" +       
        "document.querySelector('button[type=\"submit\"]').click()";   
     view.LoadUrl($"javascript: {script}"); 


    } 
} 

Надеюсь, что это поможет.