इस दस्तावेज़ में, WebView में मौजूद कॉन्टेंट को डीबग करने के लिए, JavaScript कंसोल के लॉग देखने के अलग-अलग तरीकों के बारे में बताया गया है.
JavaScript कंसोल का ऐक्सेस मिलने पर, आपको अपनी JavaScript console.log() स्टेटमेंट से मिली गड़बड़ियां, चेतावनियां, और कस्टम
मैसेज दिखते हैं. इससे, WebView में होने वाली समस्याओं का पता लगाया जा सकता है. आपके WebView से जनरेट हुए JavaScript कंसोल के मैसेज देखने के तीन अलग-अलग तरीके हैं:
Chrome DevTools: अपने WebView को Chrome DevTools से कनेक्ट करें. अपने WebView के JavaScript कंसोल के मैसेज देखने के लिए, कंसोल टैब खोलें.
WebView DevTools ऐप्लिकेशन: Logcat में कंसोल लॉग देखने के लिए, अपने डिवाइस पर
webview-log-js-console-messagesफ़्लैग चालू करने के लिए, WebView DevTools ऐप्लिकेशन का इस्तेमाल करें.मैसेज इंटरसेप्ट करना: अपने
WebChromeClientमेंonConsoleMessage()को लागू करके, JavaScript कंसोल के मैसेज इंटरसेप्ट करें. इस तरीके के बारे में, अगले सेक्शन में ज़्यादा जानकारी दी गई है.
अगर डेवलपमेंट मशीन पर, स्थानीय वेब सर्वर से कॉन्टेंट दिखाया जा रहा है, किसी डिवाइस या एम्युलेटर से कनेक्ट करने का तरीका जानने के लिए, WebView से स्थानीय डेवलपमेंट सर्वर को ऐक्सेस करना लेख पढ़ें.
onConsoleMessage() की मदद से मैसेज इंटरसेप्ट करना
WebView को डीबग करते समय, कंसोल एपीआई काम करते हैं. Logcat में कंसोल मैसेज दिखने के लिए, आपको एक
WebChromeClient देना होगा, जो onConsoleMessage() तरीके को लागू करता है. इसके बाद, WebChromeClient की मदद से, अपने
WebView पर setWebChromeClient() लागू करें.
WebChromeClient, WebView के लिए हेल्पर क्लास है. यह वेब कॉन्टेंट में होने वाली यूज़र इंटरफ़ेस (यूआई) से जुड़ी इवेंट को हैंडल करता है. जैसे, JavaScript की चेतावनियां दिखाना, वेब पेज का टाइटल बदलना, और ब्राउज़र के कंसोल को भेजे गए मैसेज को हैंडल करना.
यहां दिया गया कोड, JavaScript कंसोल के आउटपुट को इंटरसेप्ट करने और उन्हें आसानी से डीबग करने के लिए, Logcat पर रीडायरेक्ट करने के लिए, WebChromeClient को कॉन्फ़िगर करता है.
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