اشکال‌زدایی با استفاده از گزارش‌های کنسول جاوا اسکریپت

این سند روش‌های مختلفی را برای مشاهده گزارش‌های کنسول جاوا اسکریپت برای اشکال‌زدایی محتوا در یک WebView شرح می‌دهد.

دسترسی به کنسول جاوا اسکریپت به شما امکان می‌دهد خطاها، هشدارها و پیام‌های سفارشی را از console.log() جاوا اسکریپت خود مشاهده کنید تا تشخیص دهید چه اتفاقی در داخل WebView می‌افتد. سه روش مختلف برای مشاهده پیام‌های کنسول جاوا اسکریپت تولید شده توسط WebView شما وجود دارد:

اگر محتوا را از یک وب سرور محلی در دستگاه توسعه خود ارائه می‌دهید، برای یادگیری نحوه اتصال به آن از طریق یک دستگاه یا شبیه‌ساز ، به «دسترسی به یک سرور توسعه محلی از WebView» مراجعه کنید.

رهگیری پیام‌ها با onConsoleMessage()

APIهای کنسول هنگام اشکال‌زدایی یک WebView پشتیبانی می‌شوند. شما باید یک WebChromeClient ارائه دهید که متد onConsoleMessage() را برای نمایش پیام‌های کنسول در Logcat پیاده‌سازی کند. سپس، WebChromeClient را با setWebChromeClient() به WebView خود اعمال کنید.

WebChromeClient کلاس کمکی برای WebView است. این کلاس رویدادهای مرتبط با رابط کاربری را که در محتوای وب اتفاق می‌افتند، مانند نمایش هشدارهای جاوا اسکریپت، تغییر عنوان صفحه وب و مدیریت پیام‌های ارسالی به کنسول مرورگر، مدیریت می‌کند.

کد زیر یک WebChromeClient را طوری پیکربندی می‌کند که خروجی‌های کنسول جاوا اسکریپت را رهگیری کرده و آنها را برای اشکال‌زدایی آسان‌تر به Logcat هدایت کند.

کاتلین

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