সেটওয়েভিউক্লিয়েন্ট বনাম সেটওয়েব ক্রোমক্লিয়েন্টের মধ্যে পার্থক্য কী?


উত্তর:


148

থেকে সোর্স কোড :

// 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;
}

ওয়েবক্রোমক্লিয়েন্ট ব্যবহার আপনাকে জাভাস্ক্রিপ্ট ডায়লগ, ফ্যাভিকনস, শিরোনাম এবং অগ্রগতি পরিচালনা করতে দেয়। এই উদাহরণটি একবার দেখুন: একটি ওয়েবউউতে সতর্কতা () সমর্থন যুক্ত করা

প্রথম নজরে, অনেকগুলি পার্থক্য রয়েছে WebViewClient এবং WebChromeClient । তবে, মূলত: আপনি যদি এমন একটি ওয়েবউইভ বিকাশ করছেন যা খুব বেশি বৈশিষ্ট্যগুলির প্রয়োজন হয় না তবে এইচটিএমএল রেন্ডারিং করে তবে আপনি কেবলমাত্র একটি ব্যবহার করতে পারেন WebViewClient। অন্যদিকে, আপনি যদি যে পৃষ্ঠার রেন্ডারিং করছেন তার ফ্যাভিকনটি (উদাহরণস্বরূপ) লোড করতে চান, আপনার কোনও 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); 

এবং আপনার ওয়েবভিউতে (তত্ত্ব অনুসারে) সমস্ত বৈশিষ্ট্য প্রয়োগ করা হবে (অ্যান্ড্রয়েড নেটিভ ব্রাউজার হিসাবে)।


26
এই ফর্মটিতে, উত্তর সম্পূর্ণ নয়। ChromeClient গণিত জিনিসগুলি পরিচালনা করতে দেয় তবে ভিউক্লিয়েন্ট কী এবং মিল এবং পার্থক্যগুলি কী?
পেন্টিয়াম

3
এই পদ্ধতিটি কি ডিফল্ট ওয়েবভিউয়ের কিছু দুর্বল বৈশিষ্ট্যগুলি উন্নত করতে সহায়তা করবে? বিশেষত CSS3 অ্যানিমেশন এবং রূপান্তরগুলির জন্য?
আতা ইরাভানি

1
আমি কি উভয় একবারে ব্যবহার করতে পারি?
সের্গে দিরিন

1
@SergeyDirin: stackoverflow.com/a/6475858 । এই উত্তরটি উল্লেখ করুন, আপনি উভয় একবারে ব্যবহার করতে পারেন।
hoangtu23

ক্রোম না থাকলে কীভাবে ওয়েবভিউক্লিয়েন্টে ক্যামেরার অনুমতি হ্যান্ডেল করবেন?
j2emanue

100

আমি মনে করি এই প্রশ্নটির আরও কিছু বিশদ প্রয়োজন। আমার উত্তরটি অ্যান্ড্রয়েড প্রোগ্রামিং, দ্য নেয়ার্ড রাঞ্চ গাইড (দ্বিতীয় সংস্করণ) থেকে অনুপ্রাণিত।

ডিফল্টরূপে , জাভাস্ক্রিপ্ট ওয়েবভিউতে বন্ধ আছে। আপনার এটি সর্বদা চালু রাখার দরকার হয় না তবে কিছু অ্যাপের জন্য এটির প্রয়োজন হতে পারে।

URL টি লোড করা ওয়েবভিউ কনফিগার করার পরে সম্পন্ন করতে হবে, তাই আপনি শেষটি করেন। তার আগে, আপনি getSettings()ওয়েবসেটেটিংয়ের উদাহরণ পেতে এবং কল করার মাধ্যমে জাভাস্ক্রিপ্ট চালু করেন WebSettings.setJavaScriptEnabled(true)। আপনি নিজের ওয়েব ভিউ সংশোধন করতে পারেন এমন তিনটি পদ্ধতির মধ্যে প্রথমটি ওয়েবসেটিংস। এটিতে আপনি সেট করতে পারেন এমন বিভিন্ন বৈশিষ্ট্য রয়েছে যেমন ব্যবহারকারীর এজেন্ট স্ট্রিং এবং পাঠ্য আকার।

এর পরে, আপনি নিজের ওয়েবভিউস ক্লায়েন্টটি কনফিগার করেন। ওয়েবভিউক্লিয়েন্ট একটি ইভেন্ট ইন্টারফেস। ওয়েবভিউক্লিয়েন্টের নিজস্ব প্রয়োগকরণ সরবরাহ করে আপনি ইভেন্টগুলি রেন্ডার করতে পারেন। উদাহরণস্বরূপ, আপনি যখন সনাক্ত করতে পারবেন কোনও নির্দিষ্ট ইউআরএল থেকে কোনও চিত্র লোড করা শুরু করতে পারে বা সার্ভারে কোনও POST অনুরোধ জমা দিতে হবে কিনা তা আপনি নির্ধারণ করতে পারেন।

ওয়েবভিউক্লিয়েন্টে এমন অনেকগুলি পদ্ধতি রয়েছে যাতে আপনি ওভাররাইড করতে পারেন, যার বেশিরভাগ ক্ষেত্রেই আপনি মোকাবেলা করবেন না। তবে আপনাকে ডিফল্ট ওয়েবভিউক্লিয়েন্টের প্রয়োগটি প্রতিস্থাপন করতে হবে না shouldOverrideUrlLoading(WebView, String)। কোনও লিঙ্ক টিপে যেমন কোনও নতুন ইউআরএল ওয়েব ভিউতে লোড করা হয় তখন কী হবে তা এই পদ্ধতিটি নির্ধারণ করে। আপনি যদি সত্য ফিরে পান, আপনি বলছেন, "এই URL টি হ্যান্ডেল করবেন না, আমি নিজে এটি পরিচালনা করছি myself" আপনি যদি মিথ্যা ফেরান, আপনি বলছেন, "এগিয়ে যান এবং এই ইউআরএল, ওয়েবভিউ লোড করুন, আমি এটি দিয়ে কিছুই করছি না।"

ডিফল্ট বাস্তবায়ন URL এর সাথে অন্তর্ভুক্ত অভিপ্রায়টিকে আগুন ধরিয়ে দেয়, ঠিক যেমনটি আপনি আগে করেছিলেন। এখন, যদিও এটি একটি গুরুতর সমস্যা হবে। কিছু ওয়েব অ্যাপ্লিকেশন প্রথমে আপনাকে ওয়েবসাইটটির মোবাইল সংস্করণে পুনর্নির্দেশ করে। ডিফল্ট ওয়েবভিউক্লিয়েন্টের সাথে, এর অর্থ হল যে আপনাকে অবিলম্বে ব্যবহারকারীর ডিফল্ট ওয়েব ব্রাউজারে প্রেরণ করা হবে। আপনি যা এড়াতে চাইছেন এটি এটি। ফিক্সটি সহজ - কেবলমাত্র ডিফল্ট বাস্তবায়ন ওভাররাইড করে এবং মিথ্যা প্রত্যাবর্তন করে।

জিনিসগুলিকে স্লুইস করতে ওয়েবক্রোমক্লিয়েন্ট ব্যবহার করুন যেহেতু আপনি নিজের নিজস্ব ওয়েবভিউ তৈরি করতে সময় নিচ্ছেন তাই চলুন একটি প্রগতি বার যুক্ত করে এবং বোঝা পৃষ্ঠার শিরোনাম সহ সরঞ্জামদণ্ডের উপশিরোনাম আপডেট করে এটি কিছুটা বাড়িয়ে তুলি

ProgressBar হুক আপ করার জন্য, আপনাকে ওয়েবদৃশ্য দ্বিতীয় কলব্যাক ব্যবহার করবে: WebChromeClient

ওয়েবভিউক্লিয়েন্ট হ'ল ইভেন্টগুলি প্রতিক্রিয়া জানাতে একটি ইন্টারফেস; ওয়েবক্রোমক্লিয়েন্ট হ'ল ইভেন্টগুলির প্রতিক্রিয়ার জন্য একটি ইভেন্ট ইন্টারফেস যা ব্রাউজারের চারপাশে ক্রোমের উপাদানগুলি পরিবর্তন করতে পারে। এটিতে জাভাস্ক্রিপ্ট সতর্কতা, ফেভিকনস এবং লোডিং প্রগতি এবং বর্তমান পৃষ্ঠার শিরোনামের অবশ্যই আপডেট রয়েছে।

এটি ভিতরে আপ onCreateView(…)। ওয়েব ক্রোমক্লিয়েন্ট ব্যবহার করে জিনিসগুলিকে সজ্জিত করতে অগ্রগতি আপডেট এবং শিরোনাম আপডেটগুলির প্রত্যেকের নিজস্ব কলব্যাক পদ্ধতি onProgressChanged(WebView, int)এবং onReceivedTitle(WebView, String)। আপনি যে অগ্রগতিটি পেয়েছেন onProgressChanged(WebView, int)তা 0 থেকে 100 এর পূর্ণসংখ্যা। এটি যদি 100 হয় তবে আপনি জানেন যে পৃষ্ঠাটি লোড হয়ে গেছে, সুতরাং আপনি প্রগতিবারকে এর দৃশ্যমানতা সেট করে লুকিয়ে রাখেন View.GONE

অস্বীকৃতি: এই তথ্যটি অ্যান্ড্রয়েড প্রোগ্রামিং থেকে নেওয়া হয়েছিল: লেখকদের অনুমতি নিয়ে দ্য বিগ নার্ড রেঞ্চ গাইড। এই বই সম্পর্কে আরও একটি তথ্যের জন্য বা একটি অনুলিপি ক্রয়ের জন্য, দয়া করে bignerdranch.com দেখুন।


11
আমি মনে করি এটি গৃহীত উত্তরগুলির চেয়ে উত্তম উত্তর।
redbeam_
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.