2014-07-15 14 views
6

Chcę napisać AccessibilityService, która powinna pomóc użytkownikowi wypełnić formularze. Widziałem możliwość wywołania kodu Javascript za pośrednictwem WebView.loadUrl(). Ale ponieważ mam tylko AccessibilityNodeInfo widzę tylko, że WebView jest na ekranie.Wykonaj obsługę Javascript w przeglądarce Chrome z AccessibilityService

Po kilku badaniach zobaczyłem, że TalkBackService jest w stanie wstrzyknąć JavaScript, aw innym poście (Alternative way for communication between WebView and native) zobaczyłem, że jest to możliwe, jeśli mam odniesienie do obiektu WebView.

Czy istnieje sposób na wykonanie JavaScript za pomocą takiego Message lub zamiaru Broadcast w chromes WebView?

Byłoby świetnie, gdyby ktoś mógł mi pomóc! Wielkie dzięki!

+0

Cześć Lee, mam do czynienia z tym samym problemem z wypełnianiem nazwy użytkownika i hasła z mojej AccessibilitService. Nie mogłem znaleźć sposobu na wstrzyknięcie javascripta za pomocą AccessibilityInfo. Czy możesz powiedzieć, jak udało ci się to zrobić? Dzięki. – androidGuy

+0

Witaj Lee, czy możesz mi powiedzieć, jak uzyskać załadowany adres URL z tego webviewu za pomocą usługi dostępności? –

Odpowiedz

1

Chrome nie korzysta z WebView, Chrome korzysta z własnego silnika renderującego. Podczas gdy część kodu kończy się udostępnianie w WebView (jak w dwóch końcach jest kompilowany z tego samego kodu źródłowego), to tam kończy się podobieństwo.

Nie sądzę, że istnieje sposób na wstrzyknięcie kodu JavaScript do Chrome za pomocą intencji - to byłaby dość duża luka w zabezpieczeniach (w przeciwnym razie ktoś mógłby wstrzyknąć na stronę twojego banku skrypt "wyślij mi wszystkie swoje pieniądze").

Dostępność nie jest moim obszarem specjalizacji, więc mogę być całkowicie tutaj, ale wierzę, że nowsze wersje Chrome eksponują strukturę treści WWW do warstwy ułatwień dostępu, dlatego powinieneś być w stanie robić swoje bez niestandardowego JavaScriptu. Myślę, że możesz to sprawdzić za pomocą przeglądarki uiautomatorviewer: dla mnie narzędzie wyświetla formularze html po pobraniu zrzutu interfejsu użytkownika przeglądarki Chrome. Czy tak nie jest w twoim przypadku?

+0

Witam! Dziękuję za odpowiedź. Wiem, chrome używa 'ContentViewCore' [1], ale ta klasa ma również metodę' loadUrl() '. :) Wiem, że byłaby to całość bezpieczeństwa, ale LastPass [2] zdołał uruchomić javascript na aktualnie otwartej stronie. Dzięki za podpowiedź z uiautomatorviewer, ja to sprawdzę. Na zdrowie [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 - w rzeczywistości ContentViewCore.loadUrl obsługuje javascript: adresy URL w nieco inny sposób niż w widoku webowym, ale to inna dyskusja. Byłbym zaskoczony, gdyby lastpass wstrzykiwał javascript. –

+0

@ marcin-koshiba, ouh sry, właśnie sprawdziłem repozytorium chromu. Sprawdziłem dane wyjściowe z konsoli javascript na urządzeniu mobilnym i zobaczyłem kod, który wykonują. (javascript: function() ...) – lhlmgr

Powiązane problemy