অ্যান্ড্রয়েড ওয়েবভিউ, কীভাবে ব্রাউজার খোলার পরিবর্তে অ্যাপে পুনঃনির্দেশগুলি পরিচালনা করতে হয়


120

সুতরাং এখনই আমার অ্যাপ্লিকেশনটিতে আমি যে URL টি অ্যাক্সেস করছি তার পুনঃনির্দেশ হয়েছে এবং এটি ঘটলে ওয়েবভিউ আমার অ্যাপে থাকার পরিবর্তে একটি নতুন ব্রাউজার খুলবে। আমি কীভাবে সেটিংস পরিবর্তন করতে পারি যাতে ভিউটি ইউআরএলকে স্বাভাবিকের মতো পুনঃনির্দেশিত করে তবে নতুন ব্রাউজারটি না খোলার পরিবর্তে আমার অ্যাপে থাকুন?

সম্পাদনা:

আমি পুনর্নির্দেশ URL চাই, আমি এটি তৈরি করতে জানি না, সুতরাং সেই URL- এ যাওয়ার একমাত্র উপায় হ'ল এটি আমার পুনর্নির্দেশের কারণ হবে।

উদাহরণস্বরূপ: আপনি যখন এখানে যান: http://www.amazon.com/gp/aw/s/ref=is_box_/k=9780735622777 লক্ষ্য করুন এটি কীভাবে URL টি সত্যিকারের পণ্যের দিকে পুনঃনির্দেশ করবে। আমার অ্যাপ্লিকেশনটিতে, আমি যদি এটি একটি নতুন ব্রাউজারে খুলি, এটি ঠিক করে দেবে, তবে আমি যদি এটি কোনও ওয়েবভিউ দিয়ে আমার অ্যাপে রাখি তবে এটি প্রদর্শিত হবে যেমন এটি কে = 9780735622777 এর জন্য অনুসন্ধান করছে: http://www.amazon.com/gp/aw/s/ref=is_s_?k=k%3D9780735622777&x=0&y=0 । বা, এটি ব্রাউজারে দৃশ্যটি খুলবে এবং উপযুক্ত কি তা দেখায়। তবে আমি আমার অ্যাপে সবকিছু রাখতে চাই।

উত্তর:


253

একটি ওয়েবভিউক্লিয়েন্ট তৈরি করুন এবং shouldOverrideUrlLoading পদ্ধতি ওভাররাইড করুন ।

webview.setWebViewClient(new WebViewClient() {
    public boolean shouldOverrideUrlLoading(WebView view, String url){
        // do your handling codes here, which url is the requested url
        // probably you need to open that url rather than redirect:
        view.loadUrl(url);
        return false; // then it is not handled by default action
   }
});

8
আমি উত্তরগুলি পছন্দ করি যা পদ্ধতির মতো () {// আপনি যে কোডটি এখানে ব্যবহার করবেন তা জানেন না
put

19
উপরের কোডটি প্রতিলিপি করবেন না দয়া করে। কল করে দেখুন কল করার পরিবর্তে কলটি দেখুন load লোড ইউআরএল পরিবর্তে Return কল করা লোডআরএল একটি সূক্ষ্ম বাগ প্রবর্তন করে যেখানে আপনার যদি কাস্টম স্কিম ইউআরএল (<iframe src = "tel: 123" />) এর সাথে পৃষ্ঠার মধ্যে কোনও iframe থাকে তবে এটি আপনার অ্যাপ্লিকেশনটির মূল ফ্রেমটিকে সেই URL এ ন্যাভিগেট করবে সম্ভবত সম্ভবত অ্যাপ্লিকেশনটি ভেঙে একটি পার্শ্ব প্রতিক্রিয়া.
marcin.kosiba

@ মার্সিন.কোসিবা নির্ভর করে যে এটি কীভাবে ব্যবহৃত হয়, আমার ব্যবহারের ক্ষেত্রে আপনি যে বিষয়টি বর্ণনা করেছেন তা কোনও সমস্যা নয় তবে আমি এখনও মাথা উঁচু করে
দেখি

@ ওয়ারপজিট - অবশ্যই, যদি আপনি কেবল ওয়েবভিউতে বিশ্বাসযোগ্য সামগ্রী লোড করেন এবং এটির 100% গ্যারান্টি থাকে যে কেউ এই ত্রুটি কাজে লাগাতে পারে না, জরিমানা। ওটিওএইচ ঝুঁকি কেন চালাচ্ছে?
marcin.kosiba

1
shouldOverrideUrlLoadingপদ্ধতিতে যে ইউআরএলটি ডাকা হয়েছিল তার পরে কীভাবে ইউআরএল পুনর্নির্দেশ করা যায় তা আমি কীভাবে জানতে পারি ? এবং আমি এটি অনুমতি দিতে চান?
ফান সিনহ

21

অফিসিয়াল ডকুমেন্টেশন অনুসারে , ওয়েবভিউয়ের যে কোনও লিঙ্কের একটি ক্লিক একটি অ্যাপ্লিকেশন চালু করে যা ইউআরএল পরিচালনা করে, যা ডিফল্টরূপে ব্রাউজার। আপনার ডিফল্ট আচরণকে এইরূপে ওভাররাইড করা দরকার

    myWebView.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            return false;
        }
    });

8
আরও ভাল কেবল myWebView.setWebViewClient (নতুন ওয়েবভিউক্লিয়েন্ট ()) কল করুন; ওভাররাইড ইউরাললয়েডিংয়ের ডিফল্ট বাস্তবায়ন মিথ্যা প্রত্যাবর্তন করে।
সাইক্রোক্সিস

14

কেবলমাত্র একটি ডিফল্ট কাস্টম যুক্ত করলেই WebViewClientহবে। এটি ওয়েবভিউকে কোনও লোড হওয়া url নিজেই হ্যান্ডেল করে তোলে।

mWebView.setWebViewClient(new WebViewClient());

8

ইউআরএল লোড করার আগে আপনাকে আপনার কাস্টম ওয়েবভিউক্লিয়েন্ট ওভাররাইডিং shouldOverrideUrlLoading পদ্ধতি সেট করতে হবে ।

mWebView.setWebViewClient(new WebViewClient()
        {
            @SuppressWarnings("deprecation")
            @Override
            public boolean shouldOverrideUrlLoading(WebView webView, String url)
            {
                return shouldOverrideUrlLoading(url);
            }

            @TargetApi(Build.VERSION_CODES.N)
            @Override
            public boolean shouldOverrideUrlLoading(WebView webView, WebResourceRequest request)
            {
                Uri uri = request.getUrl();
                return shouldOverrideUrlLoading(uri.toString());
            }

            private boolean shouldOverrideUrlLoading(final String url)
            {
                Log.i(TAG, "shouldOverrideUrlLoading() URL : " + url);

                // Here put your code

                return true; // Returning True means that application wants to leave the current WebView and handle the url itself, otherwise return false.
            }
        });

পুনর্নির্দেশ url পরিচালনা করার জন্য উদাহরণ কোডটি দেখুন এবং ওয়েবভিউতে পিডিএফ ডাউনলোড ছাড়াই খুলুন। https://gist.github.com/ashishdas09/014a408f9f37504eb2608d98abf49500


নোট করুন যে উদাহরণ কোডের জন্য উপরের লিঙ্কটি বিদ্যমান নেই।
জেটডগ

আমি লিঙ্কটি আপলোড করেছি।
আশীষ দাস

আমার জন্য কাজ করেছেন আপনাকে ধন্যবাদ আশিদাস +10
লাইভ মেকার

2

দয়া করে নীচের কোটলিন কোডটি ব্যবহার করুন

webview.setWebViewClient(object : WebViewClient() {
            override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {   
                view.loadUrl(url)
                return false 
            }
        })

আরও তথ্যের জন্য এখানে ক্লিক করুন


2

এমন একটি ক্লাস তৈরি করুন যা ওয়েবভিউক্লিয়েন্ট কার্যকর করে এবং নিম্নলিখিত কোড যুক্ত করে যা নীচের চিত্রের মতো ইউআরএল স্ট্রিংকে ওভারভারাইড করার অনুমতি দেয়। আপনি এই [উদাহরণ] দেখতে পারেন [1]

public class myWebClient extends WebViewClient {

    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
         view.loadUrl(url); 
         return true;
     }
}

আপনার কনস্ট্রাক্টরে, নীচের মত দেখানো হয়েছে এমন একটি ওয়েবভিউ অবজেক্ট তৈরি করুন।

   web = new WebView(this); web.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.FILL_PARENT)); 

তারপরে আপনার অ্যাপ্লিকেশনের অভ্যন্তরে ইউআরএল লোড করার জন্য নিম্নলিখিত কোডটি যুক্ত করুন

       WebSettings settings=web.getSettings(); 
    settings.setJavaScriptEnabled(true); 
    
    web.loadUrl("http://www.facebook.com");
    web.setWebViewClient(new myWebClient()); 
   
 web.setWebChromeClient(new WebChromeClient() {
      // 
      //
    }

0
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
    super.onPageStarted(view, url, favicon);
    if (url.equals("your url")) {
        
            Intent intent = new Intent(view.getContext(), TransferAllDoneActivity.class);
            startActivity(intent);
        
    }
}

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