2014-07-15 5 views
6

Voglio scrivere un AccessibilityService che dovrebbe aiutare l'utente a compilare i moduli. Ho visto la possibilità di chiamare il codice Javascript tramite WebView.loadUrl(). Ma dal momento che ho appena il AccessibilityNodeInfo vedo solo che lo WebView è sullo schermo.Esegui Javascript in Chrome da AccessibilityService

Dopo alcune ricerche, ho visto che TalkBackService è in grado di iniettare Javascript, e in un altro post (Alternative way for communication between WebView and native) ho visto la sua possibile se ho un riferimento all'oggetto-WebView.

C'è un modo per eseguire JavaScript tramite un tale Message o un intento di trasmissione in chromes WebView?

Sarebbe davvero bello se qualcuno potesse aiutarmi! Grazie mille!

+0

Hi Lee, sto affrontando lo stesso problema di compilare nome utente e password dal mio AccessibilitService. Non sono riuscito a trovare il modo in cui posso iniettare un javascript utilizzando AccessibilityInfo. Puoi dire per favore come sei riuscito a farlo? Grazie. – androidGuy

+0

Ciao Lee, puoi dirmi come posso ottenere l'URL caricato da quella webview usando il servizio di accessibilità? –

risposta

1

Chrome non utilizza una WebView, Chrome utilizza il proprio motore di rendering. Mentre parte del codice finisce per essere condivisa con WebView (come nei due finiscono per essere compilati dallo stesso codice sorgente) è lì che finisce la somiglianza.

Non credo che ci sia un modo per iniettare JavaScript in Chrome attraverso un Intent - sarebbe un grosso buco di sicurezza (altrimenti qualcuno potrebbe iniettare un codice JavaScript "inviami tutto il tuo denaro" nella pagina della tua banca).

L'accessibilità non è la mia area di competenza in modo da poter essere completamente fuori qui, ma credo che le nuove versioni di Chrome espongono la struttura contenuti di Internet per lo strato di accessibilità e quindi si dovrebbe essere in grado di fare la tua cosa senza alcun JavaScript personalizzato. Penso che puoi controllare questo usando uiautomatorviewer: per me lo strumento mostra i moduli html quando prendo una copia della UI di Chrome. Non è questo il tuo caso?

+0

Ciao! grazie per la risposta. Lo so, Chrome usa il 'ContentViewCore' [1], ma questa classe ha anche il metodo' loadUrl() '. :) Lo so, sarebbe una sicurezza completa, ma LastPass [2] è riuscito a eseguire javascript sul sito web attualmente aperto. Grazie per il suggerimento con uiautomatorviewer, lo controllerò. Cheers [1] http://src.chromium.org/svn/trunk/src/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java [2] https://helpdesk.lastpass.com/upgrading-to-premium/lastpass-for-android/ – lhlmgr

+0

@ lee.O - In realtà, ContentViewCore.loadUrl gestisce javascript: gli URL in un modo leggermente diverso rispetto alla webview, ma questa è una discussione diversa. Sarei sorpreso se lastpass stia iniettando javascript, comunque. –

+0

@ marcin-koshiba, ouh sry, ho appena controllato il repository di cromo. Ho controllato l'uscita della console JavaScript javascript sul dispositivo mobile e ho visto il codice che eseguivano. (javascript: function() ...) – lhlmgr