ইউআরএল ক্লিক করা ডিফল্ট ব্রাউজার খুলবে


209

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

আমি জাভাস্ক্রিপ্ট সক্ষম করেছি। কিন্তু এখনও এটি কাজ করে না। আমি কি কিছু ভুলে গেছি?

উত্তর:


353

আপনি WebViewযদি ডিফল্ট অ্যান্ড্রয়েড আচরণ না চান তবে আপনি নিজেই ক্লিকগুলি বাধা দিতে পারেন।

আপনি একটি WebViewব্যবহার করে ঘটনাগুলি নিরীক্ষণ করতে পারেন WebViewClient। আপনি যে পদ্ধতিটি চান তা হ'ল shouldOverrideUrlLoading()। কোনও নির্দিষ্ট ইউআরএল নির্বাচন করা হলে এটি আপনাকে নিজের ক্রিয়া সম্পাদন করতে দেয়।

আপনি সেট WebViewClientআপনার এর WebViewব্যবহার setWebViewClient()পদ্ধতি

আপনি যদি WebViewএসডিকে নমুনা দেখেন তবে এমন একটি উদাহরণ রয়েছে যা আপনি যা চান ঠিক তেমন করে। এটি এতটা সহজ:

private class HelloWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }
}

97
দেখে মনে হচ্ছে এটি এর জন্য ডিফল্ট আচরণ WebViewClientএবং আপনি যদি এই কাজটি করেন তবে সাবক্লাসিংয়ের দরকার নেই। আমি কেবল এটি করে কাজ করতে পেরেছিmyWebView.setWebViewClient(new WebViewClient());
আদম

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

1
@ অ্যাডাম ++ - হ্যাঁ আমি এটিও লক্ষ্য করেছি - আমার ওয়েব ভিউগুলির মধ্যে একটিও কেন সিস্টেম ব্রাউজারটি ব্যবহার করছে না তা আমি বুঝতে পারি নি এবং এটির কারণেই আমি এটিতে একটি নতুন ওয়েবক্লিয়েন্ট যুক্ত করেছি যা কেবলমাত্র অন্য কোনও পদ্ধতিকেই ছাড়িয়ে গেছে। এটি আমাকে ডিবাগ করতে কিছুটা সময় নিয়েছে।
পিটার আজতাই

আমরা কি এমন কিছু বাস্তবায়ন করতে পারি: অনলং ক্লিক, বাহ্যিক ব্রাউজারে লিঙ্কগুলি খুলুন?
TheOnlyAnil

54

কিছু ক্ষেত্রে আপনার দরকার পড়লে onLadResource এর ওভাররাইডের দরকার পড়তে পারে যদি আপনি এমন কোনও পুনর্নির্দেশ পান যা ইউআরএল লোডিং পদ্ধতিটি ট্রিগার করে না। এই ক্ষেত্রে আমি নিম্নলিখিত চেষ্টা করেছিলাম:

@Override
public void onLoadResource(WebView view, String url)
{
    if (url.equals("http://redirectexample.com"))
    {
        //do your own thing here
    }
    else
    {
        super.onLoadResource(view, url);
    }           
}

এটা অসাধারণ! ওয়েবভিউয়ের কোনও লিঙ্ক থেকে এমপি 3 ফাইল কীভাবে খেলতে হয় তা নিয়ে কাজ করার চেষ্টা করার কয়েক ঘন্টা চেষ্টা করে আমাকে বাঁচিয়েছে। অনেক বাস্তব ধন্যবাদ!
ব্রিগ্যান্ট

25

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

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

বা পদ্ধতিতে কোনও শর্তযুক্ত যুক্তি না থাকলে কেবল এটি করুন

myWebView.setWebViewClient(new WebViewClient());

15

আপনার কোডে এই 2 টি লাইন যুক্ত করুন -

mWebView.setWebChromeClient(new WebChromeClient()); 
mWebView.setWebViewClient(new WebViewClient());

9

পদ্ধতিটি boolean shouldOverrideUrlLoading(WebView view, String url)এপিআই 24-এ অবমুক্ত করা হয়েছিল you আপনি যদি নতুন ডিভাইসগুলি সমর্থন করেন তবে আপনার ব্যবহার করা উচিত boolean shouldOverrideUrlLoading (WebView view, WebResourceRequest request)

এই জাতীয় কিছু করে আপনি উভয়ই ব্যবহার করতে পারেন:

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    newsItem.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            view.loadUrl(request.getUrl().toString());
            return true;
        }
    });
} else {
    newsItem.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    });
}

6

আরুলাক্স জেডের উত্তরটি ঠিক আমি যা খুঁজছিলাম was

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

mWebView.setWebChromeClient(new WebChromeClient()); mWebView.setWebViewClient(new WebViewClient());

ঠিক আপনার ওয়েবভিউ বিবৃতিতে।

আমার প্রয়োগকৃত ওয়েবভিউ কোডের একটি উদাহরণ এখানে:

public class WebView1 extends AppCompatActivity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    WebView wv = (WebView) findViewById(R.id.wv1); //webview statement
    wv.setWebViewClient(new WebViewClient());    //the lines of code added
    wv.setWebChromeClient(new WebChromeClient()); //same as above

    wv.loadUrl("http://www.google.com");
}}

এইভাবে, ওয়েবসাইটে ক্লিক করা প্রতিটি লিঙ্ক আপনার ওয়েবভিউয়ের অভ্যন্তরে লোড হবে। (সমস্ত এসডিকে আপডেট হওয়া সাথে অ্যান্ড্রয়েড স্টুডিও 1.2.2 ব্যবহার করা)

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