এই ডকুমেন্টটিতে একটি WebView-এর ভেতরের কন্টেন্ট ডিবাগ করার জন্য জাভাস্ক্রিপ্ট কনসোল লগ দেখার বিভিন্ন পদ্ধতি বর্ণনা করা হয়েছে।
জাভাস্ক্রিপ্ট কনসোল অ্যাক্সেস করার মাধ্যমে আপনি আপনার জাভাস্ক্রিপ্ট ` console.log() ` স্টেটমেন্ট থেকে আসা এরর, ওয়ার্নিং এবং কাস্টম মেসেজগুলো দেখতে পারেন, যা WebView-এর ভেতরে কী ঘটছে তা নির্ণয় করতে সাহায্য করে। আপনার WebView দ্বারা তৈরি জাভাস্ক্রিপ্ট কনসোল মেসেজগুলো দেখার তিনটি ভিন্ন উপায় রয়েছে:
ক্রোম ডেভটুলস : আপনার ওয়েবভিউকে ক্রোম ডেভটুলস-এর সাথে সংযুক্ত করুন । আপনার ওয়েবভিউ জাভাস্ক্রিপ্ট কনসোল বার্তাগুলো দেখতে কনসোল ট্যাবটি খুলুন।
WebView DevTools অ্যাপ : Logcat-এ কনসোল লগ দেখতে , আপনার ডিভাইসে WebView DevTools অ্যাপ ব্যবহার করে
webview-log-js-console-messagesফ্ল্যাগটি সক্রিয় করুন।বার্তা আটকানো : আপনার
WebChromeClientএonConsoleMessage()প্রয়োগ করে জাভাস্ক্রিপ্ট কনসোল বার্তা আটকান। এই পদ্ধতিটি নিম্নলিখিত বিভাগে বিস্তারিতভাবে বর্ণনা করা হয়েছে।
আপনি যদি আপনার ডেভেলপমেন্ট মেশিনের কোনো লোকাল ওয়েব সার্ভার থেকে কন্টেন্ট পরিবেশন করেন, তাহলে কোনো ডিভাইস বা এমুলেটর থেকে সেটিতে কীভাবে সংযোগ করতে হয় তা জানতে ‘WebView থেকে একটি লোকাল ডেভেলপমেন্ট সার্ভার অ্যাক্সেস করুন’ দেখুন।
onConsoleMessage() ব্যবহার করে বার্তাগুলি আটকান
একটি WebView ডিবাগ করার সময় কনসোল API-গুলো সমর্থিত হয়। Logcat-এ কনসোল বার্তা প্রদর্শিত হওয়ার জন্য আপনাকে অবশ্যই এমন একটি WebChromeClient প্রদান করতে হবে যা onConsoleMessage() মেথডটি ইমপ্লিমেন্ট করে। এরপর, setWebChromeClient() ব্যবহার করে আপনার WebView তে WebChromeClient প্রয়োগ করুন।
WebChromeClient হলো WebView এর সহায়ক ক্লাস। এটি ওয়েব কন্টেন্টে ঘটা UI-সম্পর্কিত ইভেন্টগুলো পরিচালনা করে, যেমন—জাভাস্ক্রিপ্ট অ্যালার্ট দেখানো, ওয়েব পেজের শিরোনাম পরিবর্তন করা এবং ব্রাউজারের কনসোলে পাঠানো বার্তাগুলো পরিচালনা করা।
নিম্নলিখিত কোডটি জাভাস্ক্রিপ্ট কনসোল আউটপুট গ্রহণ করে এবং সহজে ডিবাগ করার জন্য সেগুলোকে Logcat-এ পুনঃনির্দেশিত করতে একটি WebChromeClient কনফিগার করে।
কোটলিন
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
}
}
জাভা
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() ব্যবহার করার মাধ্যমে, আপনার কাস্টম লগিং লজিক জাভাস্ক্রিপ্ট ত্রুটির প্রধান হ্যান্ডলার হয়ে ওঠে, যা webview-log-js-console-messages ফ্ল্যাগের ডিফল্ট আচরণকে বাতিল করে দেয় এবং আপনাকে আপনার পছন্দমতো লগ ফরম্যাট করার সুযোগ দেয়।
ConsoleMessage মধ্যে একটি MessageLevel অবজেক্টও থাকে, যা প্রেরিত কনসোল বার্তার ধরন নির্দেশ করে। আপনি messageLevel() ব্যবহার করে বার্তার স্তর জেনে বার্তার তীব্রতা নির্ধারণ করতে পারেন, তারপর উপযুক্ত Log পদ্ধতি ব্যবহার করতে পারেন বা অন্যান্য যথাযথ পদক্ষেপ নিতে পারেন।
যখন আপনি আপনার ওয়েব পেজে কোনো কনসোল মেথড এক্সিকিউট করেন, তখন অ্যান্ড্রয়েড onConsoleMessage(ConsoleMessage) মেথডটি কল করে, যাতে আপনি এরর রিপোর্ট করতে পারেন। উদাহরণস্বরূপ, উদাহরণ কোডটির ক্ষেত্রে, একটি Logcat মেসেজ প্রিন্ট হয় যা দেখতে নিচের মতো:
Hello World -- From line 82 of http://www.example.com/hello.html