Использование Javascript в веб-просмотре - PullRequest
4 голосов
/ 21 января 2012

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

    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, я загружаю веб-сайт, но мне нужно заполнить форму входа программно !, я полагаю, что я делаю что-то не так, но я не нашел и отвечаю на чтение.Любая помощь будет принята с благодарностью !!

Ответы [ 3 ]

6 голосов
/ 21 января 2012

вам нужно дождаться загрузки веб-страницы (используйте 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 Событие

1 голос
/ 15 августа 2013

Мне нравится предложение Жана Люка, и оно сработало для меня на 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 голосов
/ 27 апреля 2017

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

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}");


    }
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...