W tym dokumencie opisujemy różne metody wyświetlania dzienników konsoli JavaScriptu, które umożliwiają debugowanie treści w widoku WebView.
Dostęp do konsoli JavaScript umożliwia wyświetlanie błędów, ostrzeżeń i niestandardowych komunikatów z instrukcji JavaScript console.log(), co pozwala diagnozować, co się dzieje w obszarze WebView. Komunikaty konsoli JavaScript generowane przez WebView możesz wyświetlać na 3 sposoby:
Narzędzia deweloperskie w Chrome: połącz WebView z Narzędziami deweloperskimi w Chrome. Otwórz kartę Konsola, aby wyświetlić komunikaty konsoli JavaScript WebView.
Aplikacja WebView DevTools: użyj aplikacji WebView DevTools, aby włączyć na urządzeniu flagę
webview-log-js-console-messages, która umożliwia wyświetlanie logów konsoli w Logcat.Przechwytywanie wiadomości: przechwytuj komunikaty konsoli JavaScript, wdrażając
onConsoleMessage()wWebChromeClient. To podejście opisujemy szczegółowo w następnej sekcji.
Jeśli udostępniasz treści z lokalnego serwera na komputerze deweloperskim, zapoznaj się z artykułem Uzyskiwanie dostępu do lokalnego serwera programistycznego z WebView, aby dowiedzieć się, jak połączyć się z nim z urządzenia lub emulatora.
Przechwytywanie wiadomości z onConsoleMessage()
Interfejsy API konsoli są obsługiwane podczas debugowania WebView. Musisz podać WebChromeClient, który implementuje metodę onConsoleMessage(), aby komunikaty konsoli pojawiały się w Logcat. Następnie nałóż WebChromeClient na WebView za pomocą setWebChromeClient().
WebChromeClient to klasa pomocnicza dla WebView. Obsługuje zdarzenia związane z interfejsem użytkownika, które występują w treściach internetowych, takie jak wyświetlanie alertów JavaScript, zmiana tytułu strony internetowej i obsługa wiadomości wysyłanych do konsoli przeglądarki.
Poniższy kod konfiguruje WebChromeClient, aby przechwytywać dane wyjściowe konsoli JavaScript i przekierowywać je do Logcat, co ułatwia debugowanie.
Kotlin
val myWebView: WebView = findViewById(R.id.my_webview)
myWebView.webChromeClient = object : WebChromeClient() {
// Override onConsoleMessage to intercept JavaScript console messages
override fun onConsoleMessage(message: ConsoleMessage): Boolean {
// Log JavaScript console messages to Logcat
Log.d("WebViewConsole", "${message.message()} -- From line ${message.lineNumber()} of ${message.sourceId()}")
// Return true to indicate that the message has been handled
return true
}
}
Java
WebView myWebView = findViewById(R.id.webview);
myWebView.setWebChromeClient(new WebChromeClient() {
// Override onConsoleMessage to intercept JavaScript console messages
@Override
public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
// Log JavaScript console messages to Logcat
Log.d("MyApplication", consoleMessage.message() + " -- From line " +
consoleMessage.lineNumber() + " of " + consoleMessage.sourceId());
// Return true to indicate that the message has been handled
return true;
}
});
Używając onConsoleMessage(), Twoja niestandardowa logika rejestrowania staje się głównym modułem obsługi błędów JavaScriptu, zastępując domyślne działanie flagi webview-log-js-console-messages i umożliwiając formatowanie logów w dowolny sposób.
ConsoleMessage zawiera też obiekt MessageLevel, który wskazuje typ dostarczanej wiadomości w konsoli. Możesz wysłać zapytanie na poziomie wiadomości za pomocą funkcji messageLevel(), aby określić ważność wiadomości, a następnie użyć odpowiedniej metody Log lub podjąć inne odpowiednie działania.
Gdy wykonasz w stronie internetowej metodę konsoli, Android wywoła metodę onConsoleMessage(ConsoleMessage), aby umożliwić Ci zgłoszenie błędu. Na przykład w przypadku przykładowego kodu wyświetlany jest komunikat Logcat podobny do tego:
Hello World -- From line 82 of http://www.example.com/hello.html