WebView এ ওয়েব অ্যাপস তৈরি করুন

একটি ক্লায়েন্ট অ্যাপ্লিকেশনের একটি অংশ হিসাবে একটি ওয়েব অ্যাপ্লিকেশন বা একটি ওয়েব পৃষ্ঠা সরবরাহ করতে WebView ব্যবহার করুন৷ WebView ক্লাস অ্যান্ড্রয়েডের View ক্লাসের একটি এক্সটেনশন যা আপনাকে আপনার অ্যাক্টিভিটি লেআউটের অংশ হিসেবে ওয়েব পৃষ্ঠাগুলি প্রদর্শন করতে দেয়। এটি একটি সম্পূর্ণরূপে উন্নত ওয়েব ব্রাউজারের বৈশিষ্ট্যগুলি অন্তর্ভুক্ত করে না, যেমন নেভিগেশন নিয়ন্ত্রণ বা একটি ঠিকানা বার৷ সমস্ত WebView করে, ডিফল্টরূপে, একটি ওয়েব পৃষ্ঠা দেখায়৷

WebView আপনাকে আপনার অ্যাপে এমন তথ্য প্রদান করতে সাহায্য করতে পারে যা আপনাকে আপডেট করার প্রয়োজন হতে পারে, যেমন একটি শেষ-ব্যবহারকারী চুক্তি বা ব্যবহারকারীর নির্দেশিকা। আপনার অ্যান্ড্রয়েড অ্যাপের মধ্যে, আপনি একটি WebView ধারণ করে এমন একটি Activity তৈরি করতে পারেন, তারপর এটি অনলাইনে হোস্ট করা আপনার নথি প্রদর্শন করতে ব্যবহার করুন৷

WebView এছাড়াও সাহায্য করতে পারে যখন আপনার অ্যাপ ব্যবহারকারীকে ডেটা সরবরাহ করে যার জন্য ইমেলের মতো ডেটা পুনরুদ্ধারের জন্য ইন্টারনেট সংযোগের প্রয়োজন হয়৷ এই ক্ষেত্রে, আপনি খুঁজে পেতে পারেন যে আপনার অ্যান্ড্রয়েড অ্যাপে একটি WebView তৈরি করা সহজ যা একটি নেটওয়ার্ক অনুরোধ সম্পাদন করার পরিবর্তে সমস্ত ব্যবহারকারীর ডেটা সহ একটি ওয়েব পৃষ্ঠা দেখায়, তারপরে ডেটা পার্স করা এবং এটিকে একটি Android লেআউটে রেন্ডার করা৷ পরিবর্তে, আপনি একটি ওয়েব পৃষ্ঠা ডিজাইন করতে পারেন যা অ্যান্ড্রয়েড-চালিত ডিভাইসগুলির জন্য তৈরি করা হয়েছে এবং তারপরে আপনার অ্যান্ড্রয়েড অ্যাপে একটি WebView প্রয়োগ করতে পারেন যা ওয়েব পৃষ্ঠাটি লোড করে৷

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

Android এর আগের সংস্করণগুলিতে WebView এর সাথে কাজ করুন

আপনার অ্যাপ যে ডিভাইসে চলছে তাতে সাম্প্রতিক WebView ক্ষমতাগুলি নিরাপদে ব্যবহার করতে, AndroidX ওয়েবকিট লাইব্রেরি যোগ করুন। এটি একটি স্ট্যাটিক লাইব্রেরি যা আপনি 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() এ একটি WebView হিসেবে সমগ্র Activity উইন্ডো সেট করতে পারেন।

অ্যাক্টিভিটি লেআউটে একটি ওয়েবভিউ যোগ করুন

লেআউটে আপনার অ্যাপে একটি 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() এ একটি ওয়েবভিউ যোগ করুন

পরিবর্তে একটি কার্যকলাপের 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 ডায়ালগ পাঠানো। এই প্রসঙ্গে ডিবাগিং সম্পর্কে আরও জানতে, ডিবাগ ওয়েব অ্যাপস পড়ুন।
  • বিষয়বস্তু রেন্ডারিংকে প্রভাবিত করে এমন ইভেন্টগুলি পরিচালনা করা, যেমন ফর্ম জমা দেওয়ার ক্ষেত্রে ত্রুটি বা WebViewClient ব্যবহার করে নেভিগেশন। আপনি URL লোডিং আটকাতে এই সাবক্লাসটি ব্যবহার করতে পারেন।
  • WebSettings পরিবর্তন করে JavaScript সক্রিয় করা হচ্ছে।
  • Android ফ্রেমওয়ার্ক অবজেক্ট অ্যাক্সেস করতে JavaScript ব্যবহার করে যা আপনি একটি WebView এ ইনজেকশন করেছেন।

WebView এ JavaScript ব্যবহার করুন

আপনি যে ওয়েব পৃষ্ঠাটি আপনার WebView এ লোড করতে চান সেটি JavaScript ব্যবহার করলে, আপনাকে অবশ্যই আপনার WebView এর জন্য JavaScript সক্ষম করতে হবে। আপনি JavaScript সক্ষম করার পরে, আপনি আপনার অ্যাপ কোড এবং আপনার JavaScript কোডের মধ্যে ইন্টারফেস তৈরি করতে পারেন।

জাভাস্ক্রিপ্ট সক্রিয় করুন

জাভাস্ক্রিপ্ট ডিফল্টরূপে WebView অক্ষম করা থাকে। আপনি আপনার 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 জন্য বিশেষভাবে ডিজাইন করা একটি ওয়েব অ্যাপ্লিকেশন তৈরি করার সময়, আপনি আপনার JavaScript কোড এবং ক্লায়েন্ট-সাইড অ্যান্ড্রয়েড কোডের মধ্যে ইন্টারফেস তৈরি করতে পারেন। উদাহরণস্বরূপ, আপনার JavaScript কোড জাভাস্ক্রিপ্টের alert() ফাংশন ব্যবহার করার পরিবর্তে একটি Dialog প্রদর্শন করতে আপনার Android কোডের একটি পদ্ধতিতে কল করতে পারে।

আপনার জাভাস্ক্রিপ্ট এবং অ্যান্ড্রয়েড কোডের মধ্যে একটি নতুন ইন্টারফেস আবদ্ধ করতে, 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 বার্তা তৈরি করতে দেয়।

আপনি এই ক্লাসটিকে জাভাস্ক্রিপ্টের সাথে আবদ্ধ করতে পারেন যা আপনার WebViewaddJavascriptInterface() দিয়ে চলে, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

কোটলিন

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 ক্লাসে অ্যাক্সেস রয়েছে। উদাহরণস্বরূপ, এখানে কিছু এইচটিএমএল এবং জাভাস্ক্রিপ্ট রয়েছে যা ব্যবহারকারী যখন একটি বোতামে ট্যাপ করে তখন নতুন ইন্টারফেস ব্যবহার করে একটি টোস্ট বার্তা তৈরি করে:

<input type="button" value="Say hello" onClick="showAndroidToast('Hello Android!')" />

<script type="text/javascript">
    function showAndroidToast(toast) {
        Android.showToast(toast);
    }
</script>

জাভাস্ক্রিপ্ট থেকে Android ইন্টারফেস আরম্ভ করার কোন প্রয়োজন নেই। WebView স্বয়ংক্রিয়ভাবে এটি আপনার ওয়েব পৃষ্ঠায় উপলব্ধ করে। সুতরাং, যখন একজন ব্যবহারকারী বোতামে ট্যাপ করে, showAndroidToast() ফাংশনটি Android ইন্টারফেস ব্যবহার করে WebAppInterface.showToast() পদ্ধতিতে কল করে।

পৃষ্ঠা নেভিগেশন হ্যান্ডেল

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

ব্যবহারকারীর দ্বারা ট্যাপ করা লিঙ্কগুলি খুলতে, setWebViewClient() ব্যবহার করে আপনার WebView এর জন্য একটি 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 হোস্ট একটি নির্দিষ্ট ডোমেনের সাথে মেলে কিনা তা পরীক্ষা করে। যদি এটি মেলে, তাহলে পদ্ধতিটি মিথ্যা ফেরত দেয় এবং URL লোডিং ওভাররাইড করে না। এটি WebView যথারীতি ইউআরএল লোড করতে দেয়। যদি ইউআরএল হোস্ট মেলে না, তাহলে ইউআরএলগুলি পরিচালনা করার জন্য ডিফল্ট Activity চালু করার জন্য একটি Intent তৈরি করা হয়, যা ব্যবহারকারীর ডিফল্ট ওয়েব ব্রাউজারে সমাধান করে।

কাস্টম ইউআরএলগুলি পরিচালনা করুন

রিসোর্স অনুরোধ করার সময় এবং কাস্টম URL স্কিম ব্যবহার করে এমন লিঙ্কগুলির সমাধান করার সময় WebView বিধিনিষেধ প্রয়োগ করে। উদাহরণস্বরূপ, যদি আপনি shouldOverrideUrlLoading() বা shouldInterceptRequest() এর মতো কলব্যাকগুলি প্রয়োগ করেন, তাহলে WebView শুধুমাত্র বৈধ URL-এর জন্য সেগুলিকে আহ্বান করবে৷

উদাহরণস্বরূপ, WebView এই ধরনের লিঙ্কগুলির জন্য আপনার shouldOverrideUrlLoading() পদ্ধতিতে কল নাও করতে পারে:

<a href="showProfile">Show Profile</a>

পূর্ববর্তী উদাহরণে দেখানো একটির মতো অবৈধ URLগুলি, WebView এ অসঙ্গতভাবে পরিচালনা করা হয়, তাই আমরা পরিবর্তে একটি সুগঠিত 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 ইউআরএল লোডিং ওভাররাইড করে, তখন এটি স্বয়ংক্রিয়ভাবে পরিদর্শন করা ওয়েব পৃষ্ঠাগুলির একটি ইতিহাস জমা করে। আপনি 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() পদ্ধতিটি সত্য হয়। একইভাবে, আপনি একটি ফরোয়ার্ড ইতিহাস আছে কিনা তা পরীক্ষা করতে canGoForward() ব্যবহার করতে পারেন। আপনি যদি এই চেকটি না করেন, তাহলে ব্যবহারকারী ইতিহাসের শেষে পৌঁছানোর পরে, goBack() এবং goForward() কিছুই করবেন না।

ডিভাইস কনফিগারেশন পরিবর্তন হ্যান্ডেল

রানটাইম চলাকালীন, একটি ডিভাইসের কনফিগারেশন পরিবর্তন হলে কার্যকলাপের অবস্থার পরিবর্তন ঘটে, যেমন ব্যবহারকারীরা যখন ডিভাইসটি ঘোরান বা একটি ইনপুট পদ্ধতি সম্পাদক (IME) খারিজ করেন। এই পরিবর্তনগুলির কারণে একটি WebView অবজেক্টের কার্যকলাপ ধ্বংস হয়ে যায় এবং একটি নতুন কার্যকলাপ তৈরি করা হয়, যা একটি নতুন WebView অবজেক্টও তৈরি করে যা ধ্বংস হওয়া বস্তুর URL লোড করে। আপনার কার্যকলাপের ডিফল্ট আচরণ পরিবর্তন করতে, আপনি পরিবর্তন করতে পারেন এটি কীভাবে আপনার ম্যানিফেস্টে orientation পরিবর্তনগুলি পরিচালনা করে৷ রানটাইম চলাকালীন কনফিগারেশন পরিবর্তনগুলি পরিচালনা করার বিষয়ে আরও জানতে, হ্যান্ডেল কনফিগারেশন পরিবর্তনগুলি পড়ুন।

জানালা পরিচালনা করুন

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

আপনার অ্যাপ্লিকেশানকে আরও সুরক্ষিত রাখতে, পপআপ এবং নতুন উইন্ডোগুলি খোলা থেকে বিরত রাখা ভাল৷ এই আচরণটি বাস্তবায়নের সবচেয়ে নিরাপদ উপায় হল setSupportMultipleWindows()"true" পাস করা কিন্তু onCreateWindow() পদ্ধতিকে ওভাররাইড করা নয়, যেটির উপর setSupportMultipleWindows() নির্ভর করে। এই যুক্তিটি লোড হতে তার লিঙ্কগুলিতে target="_blank" ব্যবহার করে এমন কোনও পৃষ্ঠাকে বাধা দেয়।