سؤال

ما الفرق بين setWebViewClient ضد. setWebChromeClient في Android؟

هل كانت مفيدة؟

المحلول

من مصدر الرمز:

// Instance of WebViewClient that is the client callback.
private volatile WebViewClient mWebViewClient;
// Instance of WebChromeClient for handling all chrome functions.
private volatile WebChromeClient mWebChromeClient;

// SOME OTHER SUTFFF.......

/**
 * Set the WebViewClient.
 * @param client An implementation of WebViewClient.
 */
public void setWebViewClient(WebViewClient client) {
    mWebViewClient = client;
}

/**
 * Set the WebChromeClient.
 * @param client An implementation of WebChromeClient.
 */
public void setWebChromeClient(WebChromeClient client) {
    mWebChromeClient = client;
}

يتيح لك استخدام WebChromeclient التعامل مع مربعات حوار JavaScript و Favicons والعناوين والتقدم. ألقِ نظرة على هذا المثال: إضافة دعم التنبيه () إلى WebView

للوهلة الأولى ، هناك الكثير من الاختلافات WebViewClient & WebChromeclient. ولكن ، في الأساس: إذا كنت تقوم بتطوير عرض ويب لن يتطلب الكثير من الميزات ولكن تقديم HTML ، فيمكنك فقط استخدام ملف WebViewClient. من ناحية أخرى ، إذا كنت ترغب في (على سبيل المثال) تحميل Favicon من الصفحة التي تقدمها ، فيجب عليك استخدام ملف WebChromeClient الكائن وتجاوز onReceivedIcon(WebView view, Bitmap icon).

في معظم الأوقات ، إذا كنت لا تريد أن تقلق بشأن هذه الأشياء ... يمكنك فقط القيام بذلك:

webView= (WebView) findViewById(R.id.webview); 
webView.setWebChromeClient(new WebChromeClient()); 
webView.setWebViewClient(new WebViewClient()); 
webView.getSettings().setJavaScriptEnabled(true); 
webView.loadUrl(url); 

وستكون كل ميزات (من الناحية النظرية) (من الناحية النظرية) قد تم تنفيذها (مثل متصفح Android الأصلي).

نصائح أخرى

أشعر أن هذا السؤال يحتاج إلى مزيد من التفاصيل. إجابتي مستوحاة من برمجة Android ، دليل Nerd Ranch (الإصدار الثاني).

بشكل افتراضي, ، JavaScript في WebView. لا تحتاج دائمًا إلى الحصول عليها ، ولكن بالنسبة لبعض التطبيقات ، قد تتطلب ذلك.

يجب أن يتم تحميل عنوان URL بعد تكوين WebView ، لذلك يمكنك القيام بذلك أخيرًا. قبل ذلك ، تقوم بتشغيل JavaScript عن طريق الاتصال getSettings() للحصول على مثيل على الويب والاتصال WebSettings.setJavaScriptEnabled(true). WebStings هي أول الطرق الثلاث التي يمكنك من خلالها تعديل عرض الويب الخاص بك. يحتوي على خصائص مختلفة يمكنك تعيينها ، مثل سلسلة وكيل المستخدم وحجم النص.

بعد ذلك ، تقوم بتكوين WebViewClient. WebViewClient هي واجهة حدث. من خلال توفير تنفيذك الخاص لـ WebViewClient ، يمكنك الرد على أحداث تقديم. على سبيل المثال ، يمكنك اكتشاف متى يبدأ العارض في تحميل صورة من عنوان URL معين أو تحديد ما إذا كان سيتم إعادة تقديم طلب البريد إلى الخادم.

WebViewClient لديه العديد من الطرق التي يمكنك تجاوزها ، ومعظمها لن تتعامل معها. ومع ذلك ، تحتاج إلى استبدال تطبيق WebViewClient الافتراضي shouldOverrideUrlLoading(WebView, String). تحدد هذه الطريقة ما سيحدث عند تحميل عنوان URL جديد في WebView ، مثل الضغط على رابط. إذا عدت صحيحًا ، فأنت تقول ، "لا تتعامل مع عنوان URL هذا ، فأنا أتعامل معه بنفسي". إذا عدت خطأ ، فأنت تقول ، "تابع وقم بتحميل عنوان URL هذا ، WebView ، فأنا لا أفعل أي شيء معه."

يطلق التنفيذ الافتراضي نية ضمنية مع عنوان URL ، تمامًا كما فعلت سابقًا. الآن ، رغم ذلك ، ستكون هذه مشكلة حادة. أول شيء تقوم به بعض تطبيقات الويب هو إعادة توجيهك إلى الإصدار المحمول من الموقع. باستخدام WebViewClient الافتراضي ، هذا يعني أنه يتم إرسالك على الفور إلى متصفح الويب الافتراضي للمستخدم. هذا فقط ما تحاول تجنبه. الإصلاح بسيط - فقط تجاوز التنفيذ الافتراضي وإرجاع خطأ.

استخدم WebChromeclient لتوبيخ الأشياءنظرًا لأنك تأخذ الوقت الكافي لإنشاء عرض الويب الخاص بك ، فلنناقشها قليلاً عن طريق إضافة شريط تقدم وتحديث العنوان الفرعي لشريط الأدوات مع عنوان الصفحة المحملة.

لتوصيل شريط التقدم ، سوف تستخدم رد الاتصال الثاني على WebView: WebChromeClient.

WebViewClient هي واجهة للاستجابة لتقديم الأحداث ؛ WebChromeClient هي واجهة حدث للرد على الأحداث التي يجب أن تغير عناصر Chrome حول المتصفح. يتضمن ذلك تنبيهات JavaScript ، Favicons ، وبالطبع تحديثات لتحميل التقدم وعنوان الصفحة الحالية.

ربطه في onCreateView(…). باستخدام WebChromeclient لتنسيق تحديثات التقدم وتحديثات العنوان لكل منها طريقة رد الاتصال الخاصة بها ،onProgressChanged(WebView, int) و onReceivedTitle(WebView, String). التقدم الذي تتلقاه من onProgressChanged(WebView, int) هو عدد صحيح من 0 إلى 100. إذا كان 100 ، فأنت تعلم أن الصفحة قد تم تحميلها ، لذلك يمكنك إخفاء شريط التقدم عن طريق تحديد وضوحه View.GONE.

عدم اعطاء رأي: تم أخذ هذه المعلومات من برمجة Android: دليل Big Nerd Ranch بإذن من المؤلفين. لمزيد من المعلومات حول هذا الكتاب أو لشراء نسخة ، يرجى زيارة bignerdranch.com.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top