本文說明查看 JavaScript 控制台記錄的不同方法,以便在 WebView 中偵錯內容。
存取 JavaScript 控制台,即可查看 JavaScript console.log() 陳述式中的錯誤、警告和自訂訊息,診斷 WebView 內發生的情況。您可以透過三種方式查看 WebView 產生的 JavaScript 控制台訊息:
Chrome 開發人員工具:將 WebView 連線至 Chrome 開發人員工具。開啟「控制台」分頁,即可查看 WebView JavaScript 控制台訊息。
WebView 開發人員工具應用程式:使用 WebView 開發人員工具應用程式在裝置上啟用
webview-log-js-console-messages標記,即可在 Logcat 中查看控制台記錄。訊息攔截:在
WebChromeClient中實作onConsoleMessage(),即可攔截 JavaScript 控制台訊息。下節將詳細說明這個方法。
如果您是從開發機上的本機網頁伺服器提供內容,請參閱「從 WebView 存取本機開發伺服器」,瞭解如何從裝置或模擬器連線至該伺服器。
攔截來自「onConsoleMessage()」的訊息
偵錯 WebView 時,系統支援控制台 API。您必須提供實作 onConsoleMessage() 方法的 WebChromeClient,才能在 Logcat 中顯示控制台訊息。然後將 WebChromeClient 套用至 WebView,方法是使用 setWebChromeClient()。
WebChromeClient 是 WebView 的輔助類別。處理網頁內容中發生的 UI 相關事件,例如顯示 JavaScript 警告、變更網頁標題,以及處理傳送至瀏覽器控制台的訊息。
下列程式碼會設定 WebChromeClient,攔截 JavaScript 控制台輸出內容,並將其重新導向至 Logcat,方便進行偵錯。
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;
}
});
使用 onConsoleMessage() 後,自訂記錄邏輯會成為 JavaScript 錯誤的主要處理常式,取代 webview-log-js-console-messages 標記的預設行為,並讓您隨意設定記錄格式。
ConsoleMessage 也包含 MessageLevel 物件,用於指出傳送的控制台訊息類型。您可以使用 messageLevel() 查詢郵件層級,判斷郵件的嚴重程度,然後使用適當的 Log 方法或採取其他適當行動。
在網頁中執行控制台方法時,Android 會呼叫 onConsoleMessage(ConsoleMessage) 方法,方便您回報錯誤。舉例來說,使用範例程式碼時,系統會列印類似下列內容的 Logcat 訊息:
Hello World -- From line 82 of http://www.example.com/hello.html