ওয়েব অ্যাপ্লিকেশন অথবা ওয়েব পৃষ্ঠাকে ক্লায়েন্ট অ্যাপ্লিকেশনের অংশ হিসেবে সরবরাহ করতে WebView ব্যবহার করুন। WebView ক্লাসটি অ্যান্ড্রয়েডের View ক্লাসের একটি এক্সটেনশন যা আপনাকে আপনার অ্যাক্টিভিটি লেআউটের অংশ হিসেবে ওয়েব পৃষ্ঠাগুলি প্রদর্শন করতে দেয়। এতে নেভিগেশন নিয়ন্ত্রণ বা ঠিকানা বারের মতো সম্পূর্ণরূপে উন্নত ওয়েব ব্রাউজারের বৈশিষ্ট্য অন্তর্ভুক্ত নেই। ডিফল্টরূপে, WebView কেবল একটি ওয়েব পৃষ্ঠা দেখায়।
WebView আপনার অ্যাপে এমন তথ্য প্রদান করতে সাহায্য করতে পারে যা আপনাকে আপডেট করতে হতে পারে, যেমন একটি শেষ-ব্যবহারকারী চুক্তি বা একটি ব্যবহারকারী নির্দেশিকা। আপনার অ্যান্ড্রয়েড অ্যাপের মধ্যে, আপনি একটি Activity তৈরি করতে পারেন যাতে একটি WebView থাকে, তারপর এটি ব্যবহার করে আপনার অনলাইনে হোস্ট করা ডকুমেন্টটি প্রদর্শন করতে পারেন।
আপনার অ্যাপ যখন এমন ব্যবহারকারীকে ডেটা সরবরাহ করে যার ডেটা পুনরুদ্ধারের জন্য ইন্টারনেট সংযোগের প্রয়োজন হয়, যেমন ইমেল, তখন WebView সাহায্য করতে পারে। এই ক্ষেত্রে, আপনার অ্যান্ড্রয়েড অ্যাপে এমন একটি WebView তৈরি করা সহজ হতে পারে যা সমস্ত ব্যবহারকারীর ডেটা সহ একটি ওয়েব পৃষ্ঠা দেখায়, একটি নেটওয়ার্ক অনুরোধ সম্পাদন করার পরিবর্তে, তারপরে ডেটা পার্স করে এবং এটিকে একটি Android লেআউটে রেন্ডার করার পরিবর্তে। পরিবর্তে, আপনি একটি ওয়েব পৃষ্ঠা ডিজাইন করতে পারেন যা Android-চালিত ডিভাইসগুলির জন্য তৈরি করা হয়েছে এবং তারপরে আপনার অ্যান্ড্রয়েড অ্যাপে একটি WebView বাস্তবায়ন করতে পারেন যা ওয়েব পৃষ্ঠা লোড করে।
এই ডকুমেন্টে বর্ণনা করা হয়েছে কিভাবে WebView ব্যবহার শুরু করবেন, কিভাবে আপনার ওয়েব পেজ থেকে JavaScript কে আপনার Android অ্যাপের ক্লায়েন্ট-সাইড কোডের সাথে সংযুক্ত করবেন, কিভাবে পৃষ্ঠা নেভিগেশন পরিচালনা করবেন এবং WebView ব্যবহার করার সময় কিভাবে উইন্ডোজ পরিচালনা করবেন।
অ্যান্ড্রয়েডের পূর্ববর্তী সংস্করণগুলিতে ওয়েবভিউয়ের সাথে কাজ করুন
আপনার অ্যাপটি যে ডিভাইসে চলছে তাতে সাম্প্রতিক WebView ক্ষমতাগুলি নিরাপদে ব্যবহার করতে, AndroidX Webkit লাইব্রেরি যোগ করুন। এটি একটি স্ট্যাটিক লাইব্রেরি যা আপনি আপনার অ্যাপ্লিকেশনে android.webkit API ব্যবহার করতে যোগ করতে পারেন যা পূর্ববর্তী প্ল্যাটফর্ম সংস্করণগুলির জন্য উপলব্ধ নয়।
এটি আপনার build.gradle ফাইলে নিম্নরূপ যোগ করুন:
কোটলিন
dependencies { implementation("androidx.webkit:webkit:1.8.0") }
খাঁজকাটা
dependencies { implementation ("androidx.webkit:webkit:1.8.0") }
আরও বিস্তারিত জানার জন্য GitHub-এ WebView উদাহরণটি অন্বেষণ করুন।
আপনার অ্যাপে একটি ওয়েবভিউ যোগ করুন
আপনার অ্যাপে একটি WebView যোগ করতে, আপনি আপনার অ্যাক্টিভিটি লেআউটে <WebView> উপাদানটি অন্তর্ভুক্ত করতে পারেন অথবা onCreate() এ সম্পূর্ণ Activity উইন্ডোটিকে WebView হিসেবে সেট করতে পারেন।
অ্যাক্টিভিটি লেআউটে একটি ওয়েবভিউ যোগ করুন
লেআউটে আপনার অ্যাপে একটি WebView যোগ করতে, আপনার অ্যাক্টিভিটির লেআউট XML ফাইলে নিম্নলিখিত কোডটি যোগ করুন:
<WebView android:id="@+id/webview" android:layout_width="match_parent" android:layout_height="match_parent" />
WebView এ একটি ওয়েব পেজ লোড করতে, loadUrl() ব্যবহার করুন, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:
কোটলিন
val myWebView: WebView = findViewById(R.id.webview) myWebView.loadUrl("http://www.example.com")
জাভা
WebView myWebView = (WebView) findViewById(R.id.webview); myWebView.loadUrl("http://www.example.com");
onCreate() এ একটি WebView যোগ করুন
কোনও অ্যাক্টিভিটির onCreate() পদ্ধতিতে আপনার অ্যাপে একটি WebView যোগ করতে, নিম্নলিখিত পদ্ধতির অনুরূপ লজিক ব্যবহার করুন:
কোটলিন
val myWebView = WebView(activityContext) setContentView(myWebView)
জাভা
WebView myWebView = new WebView(activityContext); setContentView(myWebView);
তারপর পৃষ্ঠাটি লোড করুন:
কোটলিন
myWebView.loadUrl("http://www.example.com")
জাভা
myWebView.loadUrl("https://www.example.com");
অথবা একটি HTML স্ট্রিং থেকে URL লোড করুন:
কোটলিন
// Create an unencoded HTML string, then convert the unencoded HTML string into // bytes. Encode it with base64 and load the data. val unencodedHtml = "<html><body>'%23' is the percent code for ‘#‘ </body></html>"; val encodedHtml = Base64.encodeToString(unencodedHtml.toByteArray(), Base64.NO_PADDING) myWebView.loadData(encodedHtml, "text/html", "base64")
জাভা
// Create an unencoded HTML string, then convert the unencoded HTML string into // bytes. Encode it with base64 and load the data. String unencodedHtml = "<html><body>'%23' is the percent code for ‘#‘ </body></html>"; String encodedHtml = Base64.encodeToString(unencodedHtml.getBytes(), Base64.NO_PADDING); myWebView.loadData(encodedHtml, "text/html", "base64");
আপনার অ্যাপের ইন্টারনেট অ্যাক্সেস থাকতে হবে। ইন্টারনেট অ্যাক্সেস পেতে, আপনার ম্যানিফেস্ট ফাইলে INTERNET অনুমতির জন্য অনুরোধ করুন, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:
<manifest ... > <uses-permission android:name="android.permission.INTERNET" /> ... </manifest>
আপনি নিম্নলিখিত যেকোনো একটি করে আপনার WebView কাস্টমাইজ করতে পারেন:
-
WebChromeClientব্যবহার করে পূর্ণস্ক্রিন সাপোর্ট সক্ষম করা। এই ক্লাসটি তখনও ডাকা হয় যখন কোনওWebViewএর হোস্ট অ্যাপের UI পরিবর্তন করার জন্য অনুমতির প্রয়োজন হয়, যেমন উইন্ডো তৈরি করা বা বন্ধ করা বা ব্যবহারকারীর কাছে JavaScript ডায়ালগ পাঠানো। এই প্রসঙ্গে ডিবাগিং সম্পর্কে আরও জানতে, Debug web apps পড়ুন। - কন্টেন্ট রেন্ডারিংকে প্রভাবিত করে এমন ইভেন্টগুলি পরিচালনা করা, যেমন
WebViewClientব্যবহার করে ফর্ম জমা দেওয়ার সময় বা নেভিগেশনে ত্রুটি। আপনি URL লোডিং আটকাতেও এই সাবক্লাসটি ব্যবহার করতে পারেন। -
WebSettingsপরিবর্তন করে জাভাস্ক্রিপ্ট সক্রিয় করা। - জাভাস্ক্রিপ্ট ব্যবহার করে আপনি
WebViewএ ইনজেক্ট করা অ্যান্ড্রয়েড ফ্রেমওয়ার্ক অবজেক্টগুলি অ্যাক্সেস করতে পারেন।
ওয়েবভিউতে জাভাস্ক্রিপ্ট ব্যবহার করুন
আপনার WebView এ যে ওয়েব পেজটি লোড করতে চান তা যদি JavaScript ব্যবহার করে, তাহলে আপনার WebView জন্য JavaScript সক্ষম করতে হবে। JavaScript সক্ষম করার পরে, আপনি আপনার অ্যাপ কোড এবং আপনার JavaScript কোডের মধ্যে ইন্টারফেস তৈরি করতে পারবেন।
জাভাস্ক্রিপ্ট সক্ষম করুন
WebView এ ডিফল্টভাবে JavaScript অক্ষম থাকে। আপনি আপনার WebView সাথে সংযুক্ত WebSettings মাধ্যমে এটি সক্ষম করতে পারেন। getSettings() দিয়ে WebSettings পুনরুদ্ধার করুন, তারপর setJavaScriptEnabled() দিয়ে JavaScript সক্ষম করুন।
নিম্নলিখিত উদাহরণটি দেখুন:
কোটলিন
val myWebView: WebView = findViewById(R.id.webview) myWebView.settings.javaScriptEnabled = true
জাভা
WebView myWebView = (WebView) findViewById(R.id.webview); WebSettings webSettings = myWebView.getSettings(); webSettings.setJavaScriptEnabled(true);
WebSettings বিভিন্ন ধরণের সেটিংস অ্যাক্সেস প্রদান করে যা আপনার জন্য কার্যকর হতে পারে। উদাহরণস্বরূপ, যদি আপনি এমন একটি ওয়েব অ্যাপ্লিকেশন তৈরি করেন যা আপনার Android অ্যাপে WebView জন্য বিশেষভাবে ডিজাইন করা হয়েছে, তাহলে আপনি setUserAgentString() ব্যবহার করে একটি কাস্টম ব্যবহারকারী এজেন্ট স্ট্রিং সংজ্ঞায়িত করতে পারেন, তারপর আপনার ওয়েব পৃষ্ঠায় কাস্টম ব্যবহারকারী এজেন্টকে জিজ্ঞাসা করে যাচাই করতে পারেন যে আপনার ওয়েব পৃষ্ঠার অনুরোধকারী ক্লায়েন্টটি আপনার Android অ্যাপ।
জাভাস্ক্রিপ্ট কোডকে অ্যান্ড্রয়েড কোডের সাথে সংযুক্ত করুন
আপনার অ্যান্ড্রয়েড অ্যাপে WebView জন্য বিশেষভাবে ডিজাইন করা একটি ওয়েব অ্যাপ্লিকেশন তৈরি করার সময়, আপনি আপনার জাভাস্ক্রিপ্ট কোড এবং ক্লায়েন্ট-সাইড অ্যান্ড্রয়েড কোডের মধ্যে ইন্টারফেস তৈরি করতে পারেন। উদাহরণস্বরূপ, আপনার জাভাস্ক্রিপ্ট কোড জাভাস্ক্রিপ্টের alert() ফাংশন ব্যবহার করার পরিবর্তে আপনার অ্যান্ড্রয়েড কোডে একটি পদ্ধতি কল করে একটি Dialog প্রদর্শন করতে পারে।
আপনার জাভাস্ক্রিপ্ট এবং অ্যান্ড্রয়েড কোডের মধ্যে একটি নতুন ইন্টারফেস বাঁধতে, addJavascriptInterface() কল করুন, এটিকে আপনার জাভাস্ক্রিপ্টের সাথে বাঁধার জন্য একটি ক্লাস ইনস্ট্যান্স এবং একটি ইন্টারফেসের নাম দিন যা আপনার জাভাস্ক্রিপ্ট ক্লাস অ্যাক্সেস করার জন্য কল করতে পারে।
উদাহরণস্বরূপ, আপনি আপনার অ্যান্ড্রয়েড অ্যাপে নিম্নলিখিত ক্লাসটি অন্তর্ভুক্ত করতে পারেন:
কোটলিন
/** Instantiate the interface and set the context. */ class WebAppInterface(private val mContext: Context) { /** Show a toast from the web page. */ @JavascriptInterface fun showToast(toast: String) { Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show() } }
জাভা
public class WebAppInterface { Context mContext; /** Instantiate the interface and set the context. */ WebAppInterface(Context c) { mContext = c; } /** Show a toast from the web page. */ @JavascriptInterface public void showToast(String toast) { Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show(); } }
এই উদাহরণে, WebAppInterface ক্লাসটি showToast() পদ্ধতি ব্যবহার করে ওয়েব পৃষ্ঠাটিকে একটি Toast বার্তা তৈরি করতে দেয়।
আপনি এই ক্লাসটিকে আপনার WebView এ addJavascriptInterface() ব্যবহার করে চালানো জাভাস্ক্রিপ্টের সাথে সংযুক্ত করতে পারেন, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:
কোটলিন
val webView: WebView = findViewById(R.id.webview) webView.addJavascriptInterface(WebAppInterface(this), "Android")
জাভা
WebView webView = (WebView) findViewById(R.id.webview); webView.addJavascriptInterface(new WebAppInterface(this), "Android");
এটি WebView এ চলমান জাভাস্ক্রিপ্টের জন্য Android নামে একটি ইন্টারফেস তৈরি করে। এই মুহুর্তে, আপনার ওয়েব অ্যাপ্লিকেশনটি WebAppInterface ক্লাসে অ্যাক্সেস পাবে। উদাহরণস্বরূপ, এখানে কিছু HTML এবং JavaScript রয়েছে যা ব্যবহারকারী যখন একটি বোতামে ট্যাপ করে তখন নতুন ইন্টারফেস ব্যবহার করে একটি টোস্ট বার্তা তৈরি করে:
<input type="button" value="Say hello" onClick="showAndroidToast('Hello Android!')" /> <script type="text/javascript"> function showAndroidToast(toast) { Android.showToast(toast); } </script>
জাভাস্ক্রিপ্ট থেকে Android ইন্টারফেসটি শুরু করার কোনও প্রয়োজন নেই। WebView স্বয়ংক্রিয়ভাবে এটি আপনার ওয়েব পৃষ্ঠায় উপলব্ধ করে। সুতরাং, যখন কোনও ব্যবহারকারী বোতামটি ট্যাপ করেন, তখন showAndroidToast() ফাংশনটি WebAppInterface.showToast() পদ্ধতিটি কল করার জন্য Android ইন্টারফেস ব্যবহার করে।
পৃষ্ঠা নেভিগেশন পরিচালনা করুন
যখন ব্যবহারকারী আপনার WebView এ একটি ওয়েব পৃষ্ঠা থেকে একটি লিঙ্কে ট্যাপ করে, তখন ডিফল্টভাবে, Android একটি অ্যাপ চালু করে যা URL গুলি পরিচালনা করে। সাধারণত, ডিফল্ট ওয়েব ব্রাউজার গন্তব্য URL খোলে এবং লোড করে। তবে, আপনি আপনার WebView এর জন্য এই আচরণটি ওভাররাইড করতে পারেন যাতে লিঙ্কগুলি আপনার WebView এর মধ্যে খোলা থাকে। এরপর আপনি ব্যবহারকারীকে তাদের ওয়েব পৃষ্ঠার ইতিহাসের মাধ্যমে পিছনে এবং সামনে নেভিগেট করতে দিতে পারেন যা আপনার WebView দ্বারা রক্ষণাবেক্ষণ করা হয়।
ব্যবহারকারীর দ্বারা ট্যাপ করা লিঙ্কগুলি খুলতে, আপনার WebView এর জন্য setWebViewClient() ব্যবহার করে একটি WebViewClient প্রদান করুন। ব্যবহারকারীর ট্যাপ করা সমস্ত লিঙ্ক আপনার WebView এ লোড হয়। যদি আপনি ক্লিক করা লিঙ্কটি কোথায় লোড হয় তার উপর আরও নিয়ন্ত্রণ চান, তাহলে আপনার নিজস্ব WebViewClient তৈরি করুন যা shouldOverrideUrlLoading() পদ্ধতিকে ওভাররাইড করে। নিম্নলিখিত উদাহরণটি ধরে নেয় যে MyWebViewClient হল Activity এর একটি অভ্যন্তরীণ শ্রেণী।
কোটলিন
private class MyWebViewClient : WebViewClient() { override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean { if (Uri.parse(url).host == "www.example.com") { // This is your website, so don't override. Let your WebView load // the page. return false } // Otherwise, the link isn't for a page on your site, so launch another // Activity that handles URLs. Intent(Intent.ACTION_VIEW, Uri.parse(url)).apply { startActivity(this) } return true } }
জাভা
private class MyWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { if ("www.example.com".equals(request.getUrl().getHost())) { // This is your website, so don't override. Let your WebView load the // page. return false; } // Otherwise, the link isn't for a page on your site, so launch another // Activity that handles URLs. Intent intent = new Intent(Intent.ACTION_VIEW, request.getUrl()); startActivity(intent); return true; } }
তারপর WebView এর জন্য এই নতুন WebViewClient এর একটি উদাহরণ তৈরি করুন:
কোটলিন
val myWebView: WebView = findViewById(R.id.webview) myWebView.webViewClient = MyWebViewClient()
জাভা
WebView myWebView = (WebView) findViewById(R.id.webview); myWebView.setWebViewClient(new MyWebViewClient());
এখন যখন ব্যবহারকারী কোনও লিঙ্কে ট্যাপ করেন, তখন সিস্টেমটি shouldOverrideUrlLoading() পদ্ধতিটি কল করে, যা পূর্ববর্তী উদাহরণে সংজ্ঞায়িত URL হোস্টটি একটি নির্দিষ্ট ডোমেনের সাথে মেলে কিনা তা পরীক্ষা করে। যদি এটি মেলে, তাহলে পদ্ধতিটি false রিটার্ন করে এবং URL লোডিংকে ওভাররাইড করে না। এটি WebView যথারীতি URL লোড করতে দেয়। যদি URL হোস্ট মেলে না, তাহলে URL পরিচালনার জন্য ডিফল্ট Activity চালু করার জন্য একটি Intent তৈরি করা হয়, যা ব্যবহারকারীর ডিফল্ট ওয়েব ব্রাউজারে সমাধান করে।
কাস্টম URL গুলি পরিচালনা করুন
কাস্টম URL স্কিম ব্যবহার করে এমন রিসোর্স অনুরোধ করার সময় এবং লিঙ্কগুলি সমাধান করার সময় WebView বিধিনিষেধ প্রয়োগ করে। উদাহরণস্বরূপ, যদি আপনি shouldOverrideUrlLoading() বা shouldInterceptRequest() এর মতো কলব্যাক প্রয়োগ করেন, তাহলে WebView শুধুমাত্র বৈধ URL গুলির জন্য সেগুলি ব্যবহার করবে।
উদাহরণস্বরূপ, WebView এই ধরণের লিঙ্কের জন্য আপনার shouldOverrideUrlLoading() পদ্ধতিটি কল নাও করতে পারে:
<a href="showProfile">Show Profile</a>
পূর্ববর্তী উদাহরণে দেখানো URL গুলির মতো, WebView তে অবৈধ URL গুলি অসঙ্গতভাবে পরিচালনা করা হয়, তাই আমরা এর পরিবর্তে একটি সুগঠিত URL ব্যবহার করার পরামর্শ দিচ্ছি। আপনার প্রতিষ্ঠান যে ডোমেন নিয়ন্ত্রণ করে তার জন্য আপনি একটি কাস্টম স্কিম বা HTTPS URL ব্যবহার করতে পারেন।
আগের উদাহরণের মতো, একটি লিঙ্কে একটি সাধারণ স্ট্রিং ব্যবহার করার পরিবর্তে, আপনি নিম্নলিখিতগুলির মতো একটি কাস্টম স্কিম ব্যবহার করতে পারেন:
<a href="example-app:showProfile">Show Profile</a>
তারপর আপনি আপনার shouldOverrideUrlLoading() পদ্ধতিতে এই URL টি এভাবে পরিচালনা করতে পারেন:
কোটলিন
// The URL scheme must be non-hierarchical, meaning no trailing slashes. const val APP_SCHEME = "example-app:" override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean { return if (url?.startsWith(APP_SCHEME) == true) { urlData = URLDecoder.decode(url.substring(APP_SCHEME.length), "UTF-8") respondToData(urlData) true } else { false } }
জাভা
// The URL scheme must be non-hierarchical, meaning no trailing slashes. private static final String APP_SCHEME = "example-app:"; @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (url.startsWith(APP_SCHEME)) { urlData = URLDecoder.decode(url.substring(APP_SCHEME.length()), "UTF-8"); respondToData(urlData); return true; } return false; }
shouldOverrideUrlLoading() API মূলত নির্দিষ্ট URL-এর জন্য ইন্টেন্ট চালু করার জন্য তৈরি। এটি বাস্তবায়নের সময়, WebView হ্যান্ডেল করা URL-এর জন্য false রিটার্ন করতে ভুলবেন না। তবে, আপনি লঞ্চিং ইন্টেন্টের মধ্যেই সীমাবদ্ধ নন। আপনি পূর্ববর্তী কোড নমুনাগুলিতে যেকোনো কাস্টম আচরণ দিয়ে লঞ্চিং ইন্টেন্ট প্রতিস্থাপন করতে পারেন।
ওয়েব পৃষ্ঠার ইতিহাস নেভিগেট করুন
যখন আপনার WebView URL লোডিংকে ওভাররাইড করে, তখন এটি স্বয়ংক্রিয়ভাবে পরিদর্শন করা ওয়েব পৃষ্ঠাগুলির ইতিহাস সংগ্রহ করে। আপনি goBack() এবং goForward() ব্যবহার করে ইতিহাসের মাধ্যমে পিছনে এবং সামনে নেভিগেট করতে পারেন।
উদাহরণস্বরূপ, নিম্নলিখিতটি দেখায় কিভাবে আপনার Activity ডিভাইসের পিছনের দিকে নেভিগেট করার জন্য পিছনের দিকে বোতামটি ব্যবহার করতে পারে:
কোটলিন
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { // Check whether the key event is the Back button and if there's history. if (keyCode == KeyEvent.KEYCODE_BACK && myWebView.canGoBack()) { myWebView.goBack() return true } // If it isn't the Back button or there isn't web page history, bubble up to // the default system behavior. Probably exit the activity. return super.onKeyDown(keyCode, event) }
জাভা
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { // Check whether the key event is the Back button and if there's history. if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) { myWebView.goBack(); return true; } // If it isn't the Back button or there's no web page history, bubble up to // the default system behavior. Probably exit the activity. return super.onKeyDown(keyCode, event); }
যদি আপনার অ্যাপটি AndroidX AppCompat 1.6.0+ ব্যবহার করে, তাহলে আপনি পূর্ববর্তী স্নিপেটটি আরও সহজ করতে পারেন:
কোটলিন
onBackPressedDispatcher.addCallback { // Check whether there's history. if (myWebView.canGoBack()) { myWebView.goBack() } }
জাভা
onBackPressedDispatcher.addCallback { // Check whether there's history. if (myWebView.canGoBack()) { myWebView.goBack(); } }
যদি ব্যবহারকারীর দেখার জন্য ওয়েব পৃষ্ঠার ইতিহাস থাকে, তাহলে canGoBack() পদ্ধতিটি true ফেরত পাঠায়। একইভাবে, আপনি canGoForward() ব্যবহার করে ফরোয়ার্ড ইতিহাস আছে কিনা তা পরীক্ষা করতে পারেন। যদি আপনি এই পরীক্ষাটি না করেন, তাহলে ব্যবহারকারী ইতিহাসের শেষে পৌঁছানোর পরে, goBack() এবং goForward() কিছুই করে না।
ডিভাইস কনফিগারেশন পরিবর্তনগুলি পরিচালনা করুন
রানটাইম চলাকালীন, যখন কোনও ডিভাইসের কনফিগারেশন পরিবর্তন হয়, যেমন ব্যবহারকারীরা যখন ডিভাইসটি ঘোরান বা কোনও ইনপুট পদ্ধতি সম্পাদক (IME) খারিজ করেন, তখন কার্যকলাপের অবস্থার পরিবর্তন ঘটে। এই পরিবর্তনগুলির ফলে একটি WebView অবজেক্টের কার্যকলাপ ধ্বংস হয়ে যায় এবং একটি নতুন কার্যকলাপ তৈরি হয়, যা একটি নতুন WebView অবজেক্টও তৈরি করে যা ধ্বংস হওয়া বস্তুর URL লোড করে। আপনার কার্যকলাপের ডিফল্ট আচরণ পরিবর্তন করতে, আপনি আপনার ম্যানিফেস্টে orientation পরিবর্তনগুলি কীভাবে পরিচালনা করে তা পরিবর্তন করতে পারেন। রানটাইম চলাকালীন কনফিগারেশন পরিবর্তনগুলি পরিচালনা করার বিষয়ে আরও জানতে, Handle configuration changes পড়ুন।
উইন্ডোজ পরিচালনা করুন
ডিফল্টরূপে, নতুন উইন্ডো খোলার অনুরোধ উপেক্ষা করা হয়। এটি জাভাস্ক্রিপ্ট দ্বারা খোলা হোক বা লিঙ্কের টার্গেট অ্যাট্রিবিউট দ্বারা খোলা হোক না কেন সত্য। একাধিক উইন্ডো খোলার জন্য আপনার নিজস্ব আচরণ প্রদান করতে আপনি আপনার WebChromeClient কাস্টমাইজ করতে পারেন।
আপনার অ্যাপটিকে আরও সুরক্ষিত রাখতে, পপআপ এবং নতুন উইন্ডো খোলা থেকে বিরত রাখাই ভালো। এই আচরণটি বাস্তবায়নের সবচেয়ে নিরাপদ উপায় হল setSupportMultipleWindows() তে "true" পাস করা কিন্তু onCreateWindow() পদ্ধতিকে ওভাররাইড না করা, যার উপর setSupportMultipleWindows() নির্ভর করে। এই লজিকটি যেকোনো পৃষ্ঠাকে লোড হতে বাধা দেয় যা তার লিঙ্কগুলিতে target="_blank" ব্যবহার করে।