2012-05-03 3 views
1

я хочу, чтобы заполнить поля с этим кодом, но он дает мне ошибкуАвто заполнения полей в WebView андроид

Account[] accounts = AccountManager.get(this).getAccounts(); 
    for (Account account : accounts) { 
     // TODO: Check possibleEmail against an email regex or treat 
     // account.name as an email address only for certain account.type values. 


     String possibleEmail = account.name; 



    myWebView.setWebViewClient(new HelloWebViewClient()); 

    setTitleColor(Color.GRAY); //the title bar color 
    myWebView.loadUrl("http://m.gmail.com"); 
    myWebView.loadUrl("javascript: {document.getElementById('id_email').value ='"+possibleEmail+"'};"); 


} 

Это дает мне эту ошибку

05-02 20: 28: 24.191: E/веб-консоль (1402): Uncaught TypeError: Невозможно установить свойство 'значения' нуля на: 1

Спасибо за вашу помощь

ответ

3

loadURL асинхронный; другими словами, вызов loadUrl запускает HTTP-запрос, но затем немедленно возвращается, прежде чем документ будет загружен и отображен. Ошибка, которую вы видите, заключается в том, что вы пытаетесь выполнить javascript слишком рано (до того, как документ будет загружен, проанализирован и отображен).

Вам нужно будет использовать WebViewClient и дождитесь завершения загрузки страницы перед тем, как выполнить javascript. Попробуйте обратный вызов onPageFinished, но будьте осторожны, что иногда вы можете получать множественные обратные вызовы из-за iFrames и т. П.

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

EDIT Если вы ориентируетесь KitKat и выше, то вы также должны заботиться о какой метод использовать основанный на андроид версии. Код Follwoing дает намного лучшее объяснение:

if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) 
{ 
     webView.evaluateJavascript(yourScript, null); 
} 
else 
{ 
     webView.loadUrl(yourScript); 

} 
+0

Работал отлично, спасибо – GridSurfer

+0

эй. можете ли вы обратиться к любому полному примеру. Раньше я не работал с таким кодом. –

Смежные вопросы