WKWebView কেন লক্ষ্য = "_ ফাঁকা" সাথে লিঙ্ক খুলছে না?


122

WKWebViewtarget="_blank"তাদের এইচটিএমএল- <a href>ট্যাগটিতে 'নতুন উইন্ডোতে খুলুন' বৈশিষ্ট্যযুক্ত কোনও লিঙ্ক খোলেন না ।


দয়া করে চিহ্নিত সঠিক উত্তরটি আপডেট করুন
এফ্রেন

উত্তর:


184

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

বাস্তবায়ন WKUIDelegateপ্রতিনিধি এবং এটি সেট _webview.uiDelegate। তারপরে প্রয়োগ করুন:

- (WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures
{
  if (!navigationAction.targetFrame.isMainFrame) {
    [webView loadRequest:navigationAction.request];
  }

  return nil;
}

4
এটা সঠিক উত্তর. আমরা কোনও সাফল্য না দিয়ে গৃহীত উত্তরটি চেষ্টা করেছি। তবে @ ক্লাউডের উত্তর কাজ করে, এবং দেব ফোরামের এই প্রতিক্রিয়া কেন তা ব্যাখ্যা করে।
ক্রিস্টোফার পিক্সলে

5
এই সমাধানটি আমার পক্ষে কাজ করেছিল। সেট করতে ভুলবেন না UIDelegateযেহেতু এই পদ্ধতিতে ঘোষিত হয়, সম্পত্তি WKUIDelegateনা WKNavigationDelegate
টেকটো সানো

1
ঠিক আছে, আমি দেখতে পাচ্ছি যে লোকেরা WKWebView এর মতো ব্যবহার করতে চায়। আমি আমার প্রকল্প github.com/sticksen/STKWebKitViewController- তে একই ডাব্লুউইউবিউ ভিউতে (উপরে প্রদর্শিত হিসাবে) টার্গেট = _ব্ল্যাঙ্ক-লিঙ্কগুলি খোলার সম্ভাবনাটি বাস্তবায়িত করেছি
stk

5
আমার ক্রিসটফারপিক্সলে এই পদ্ধতিটি যখন আমার ডব্লুউইবিভিউয়ের সাথে ব্যবহার করবেন তখন অনুরোধ ইউআরএলটি সর্বদা ফাঁকা থাকে, তাই ওয়েবভিউ কোনও ফাঁকা সাদা পৃষ্ঠায় নির্দেশ দেয়, কোনও ধারণা?
জেসন মারে

1
পোস্ট ডেটা সহ একটি ফর্ম থেকে যখন '_ব্ল্যাঙ্ক' অনুরোধটি প্রেরণ করা হবে তখন আমি খুঁজে পাব যে পোস্টের ডেটাটি হারিয়ে যাবে !!! কোন সাহায্য? @ ক্লাউড উউ
অ্যান্ড্রু

66

@ ক্লাউড জু এর উত্তর সঠিক উত্তর। কেবল রেফারেন্সের জন্য, এটি সুইফটে রয়েছে:

// this handles target=_blank links by opening them in the same view
func webView(webView: WKWebView!, createWebViewWithConfiguration configuration: WKWebViewConfiguration!, forNavigationAction navigationAction: WKNavigationAction!, windowFeatures: WKWindowFeatures!) -> WKWebView! {
    if navigationAction.targetFrame == nil {
        webView.loadRequest(navigationAction.request)
    }
    return nil
}

2
আপনি যদি এটির পরিবর্তে সাফারি খুলতে চান তবে আপনি এটি কীভাবে লিখবেন? এছাড়াও এটিকে কাজ করার জন্য আমার ভিউ কন্ট্রোলারে উল্লেখ করতে হবে?
জেদ গ্রান্ট

1
মোবাইল সাফারিতে নতুন পৃষ্ঠাটি খোলার জন্য এই উত্তরটি দেখুন: stackoverflow.com/a/30604481/558789
পল ব্রুনিউ

1
এটি লিঙ্কগুলির জন্য কাজ করে তবে জাভাস্ক্রিপ্ট, যেমন উইন্ডো.ওপেন (url, "_blank") দিয়ে খোলা নতুন উইন্ডোজ সনাক্ত করতে পারে বলে মনে হচ্ছে না
ক্র্যাশলোট

এফওয়াইআইআই ওয়েবউইভ.এলআরউইয়েস্টকে এপিআইয়ের সাম্প্রতিক সংস্করণগুলিতে স্পষ্টতই ওয়েবভিউ.লোডের নামকরণ করা হয়েছে
বিল ওয়েইম্যান

52

সুইফট ৪.২+ এর সর্বশেষতম সংস্করণ ব্যবহার করতে

import WebKit

সঙ্গে আপনার ক্লাস প্রসারিত করুন ডব্লিউকেইউইলেগেট

ওয়েবভিউয়ের জন্য প্রতিনিধি সেট করুন

self.webView.uiDelegate = self

প্রোটোকল পদ্ধতি প্রয়োগ করুন

func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? {
    if navigationAction.targetFrame == nil {
        webView.load(navigationAction.request)
    }
    return nil
}

আসল সদৃশ নয়। প্যারামিটারগুলির বিকল্পের মধ্যে পার্থক্য রয়েছে যা আপনার সাথে লিঙ্ক করা উত্তরের সুইফট 4.1 ডব্লু কেইউডেলিগেট প্রোটোকলের সাথে খাপ খায় না।
ইয়াকট্যাক

হাই, আমি যখন পিনটারেস্ট ইউআরএল দিয়ে ডব্লিউকেউইউভিউটি লোড করছি তখন আমি "ফেসবুক দিয়ে চালিয়ে" খুলতে পারিনি। এখন আমি "গুগল দিয়ে চালিয়ে যাও" এ ক্লিক করতে এবং তথ্য পেতে সক্ষম হয়েছি। আমাকে সাহায্য করুন।
এনআরভি

আমি একই সমস্যার সমাধান করছি ডাব্লুউইউবিউউভিউতে; লগইন এবং আমার অ্যাপ্লিকেশন কাজ না পুনর্নির্দেশ। কোন সাহায্য ?
জামশেদ আলম

1
দয়া করে কেউ আমাকে সাহায্য করতে পারেন, আমি উইকিউউবিউতে ডেলিগেট ইউআইডিলেগেটকে অর্পণ করেছি তবে এর পদ্ধতিটি কনফিগারেশনের সাথে ওয়েব ভিউ তৈরি করা বলা হচ্ছে না
চেতনা পঞ্চাল

25

নিজেকে ডাব্লু কে নেভিগেশনডেলিগেট হিসাবে যুক্ত করুন

_webView.navigationDelegate = self;

এবং প্রতিনিধি কলব্যাক সিদ্ধান্তে নীচের কোডটি বাস্তবায়ন করুন পলিসি ফর নেভিগেশনঅ্যাকশন: সিদ্ধান্তহ্যান্ডার:

- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler
{
    //this is a 'new window action' (aka target="_blank") > open this URL externally. If we´re doing nothing here, WKWebView will also just do nothing. Maybe this will change in a later stage of the iOS 8 Beta
    if (!navigationAction.targetFrame) { 
        NSURL *url = navigationAction.request.URL;
        UIApplication *app = [UIApplication sharedApplication];
        if ([app canOpenURL:url]) {
            [app openURL:url];
        }
    }
    decisionHandler(WKNavigationActionPolicyAllow);
}

পিএস: এই কোডটি আমার সামান্য প্রকল্পের STKWebKitViewController, যা ডাব্লুউইউবিউভিউয়ের চারপাশে একটি ব্যবহারযোগ্য ইউআইকে আবৃত করে।


1
একটি টাইপো আছে ডাব্লু কে ন্যাভিগেশন অ্যাকশন পলিসি এবং মঞ্জুরের মধ্যে একটি বিন্দু অনুপস্থিত রয়েছে
মুরগির

@stk যদি ইউআইএপ্লিকেশনটি সাফারি অ্যাপে লিঙ্কটি খুলতে যাচ্ছে তবে আমি কীভাবে বুঝতে পারি? যদি AppStore লিঙ্ক - আমি AppStore অ্যাপ্লিকেশানে OT খুলতে হবে, কিন্তু যদি এটা স্বাভাবিক ওয়েবপৃষ্ঠাটি হয় - আমি একই WKWebView এটা খুলতে হবে stackoverflow.com/questions/29056854/...
BergP

1
পছন্দ করুন ;)
আয়ান সেনগুপ্ত

1
এটি লিঙ্কগুলির জন্য কাজ করে, তবে জাভাস্ক্রিপ্ট দিয়ে খোলা নতুন উইন্ডোজগুলি সনাক্ত করতে পারে বলে মনে হচ্ছে না,window.open(url, "_blank")
ক্র্যাশলোট

@ ক্র্যাশলোট আপনি উইন্ডো.ওপেনের সমাধান খুঁজে পেয়েছেন?
স্যাম

14

আপনি যদি ইতিমধ্যে WKWebView.navicationDelegate সেট করে থাকেন

WKWebView.navicationDelegate = স্ব;

আপনার কেবল প্রয়োগ করা দরকার:

- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler
{
    BOOL shouldLoad = [self shouldStartLoadWithRequest:navigationAction.request]; // check the url if necessary

    if (shouldLoad && navigationAction.targetFrame == nil) {
        // WKWebView ignores links that open in new window
        [webView loadRequest:navigationAction.request];
    }

    // always pass a policy to the decisionHandler
    decisionHandler(shouldLoad ? WKNavigationActionPolicyAllow : WKNavigationActionPolicyCancel);
}

এইভাবে আপনার ডাব্লু কেইউডিলেট পদ্ধতি কার্যকর করতে হবে না।


1
এটি লিঙ্কগুলির জন্য কাজ করে তবে জাভাস্ক্রিপ্ট, যেমন উইন্ডো.ওপেন (url, "_blank") দিয়ে খোলা নতুন উইন্ডোজ সনাক্ত করতে পারে বলে মনে হচ্ছে না
ক্র্যাশলোট

@ ক্র্যাশলোট আপনি এই উত্তরটি পরীক্ষা করেছেন? stackoverflow.com/questions/33190234/wkwebview-and-window-open
জোসে রেগো

8

এই সমাধানগুলির কোনওটিই আমার পক্ষে কাজ করেনি, আমি সমস্যাটি এর দ্বারা সমাধান করেছি:

1) ডব্লিউকেইউইলেগেট বাস্তবায়ন করা

@interface ViewController () <WKNavigationDelegate, WKUIDelegate>

2) ডাব্লুউইউবিউউয়ের ইউআইডিলেগেট প্রতিনিধি নির্ধারণ করা

self.wkWebview.UIDelegate = self;

3) createWebViewWithConfigration পদ্ধতি প্রয়োগ করা

- (WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures {

if (!navigationAction.targetFrame.isMainFrame) {
    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
    [[UIApplication sharedApplication] openURL:[navigationAction.request URL]];
}
return nil;  }

এটি করার সময় আমি কেবল একটি সিএবিবিআরটি পাই। এটি কাজ করে না।
ব্যবহারকারী2009449

8

Cloud xuএর উত্তর আমার সমস্যা সমাধান করে।

যদি কারও সমতুল্য সুইফ্ট (4.x / 5.0) সংস্করণটির প্রয়োজন হয় তবে তা এখানে:

func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? {
    if let frame = navigationAction.targetFrame,
        frame.isMainFrame {
        return nil
    }
    // for _blank target or non-mainFrame target
    webView.load(navigationAction.request)
    return nil
}

অবশ্যই আপনাকে webView.uiDelegateপ্রথমে সেট করতে হবে ।


7

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

এটার মতো কিছু:

self.webView?.UIDelegate = self

সুতরাং তিনটি স্থান রয়েছে যা আপনার পরিবর্তন করতে হবে।


আপনার কোডটি টাইপ করুন, এটি:self.webView.UIDelegate = self
হেনরিক পেটারসন

এটি নিহিত কিনা তা নিশ্চিত নন তবে আইওএস 10 এ এই লাইন কোডটি কাজ করার জন্য ViewControllerআপনাকে উত্তরাধিকারী হওয়া দরকার WKUIDelegate। যেমনclass ViewController: UIViewController, WKNavigationDelegate, WKScriptMessageHandler, WKUIDelegate
ltrainpr

4

আপনি অন্য ভিউ কন্ট্রোলারটিকে চাপ দিতে পারেন, বা একটি নতুন ট্যাব ইত্যাদি খুলতে পারেন:

func webView(webView: WKWebView, createWebViewWithConfiguration configuration: WKWebViewConfiguration, forNavigationAction navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? {
    var wv: WKWebView?

    if navigationAction.targetFrame == nil {
        if let vc = self.storyboard?.instantiateViewControllerWithIdentifier("ViewController")  as? ViewController {
            vc.url = navigationAction.request.URL
            vc.webConfig = configuration
            wv = vc.view as? WKWebView

            self.navigationController?.pushViewController(vc, animated: true)
        }
    }

    return wv
}

এটি সেট করা প্রয়োজন vc.url? আমি এটি সেট করছি না, এবং ওয়েব ভিউটি সঠিকভাবে লোড হচ্ছে। এছাড়াও, আমার অভিজ্ঞতা আমি শুধু দেখছি createWebViewWithConfigurationনামক যখন navigationAction.targetFrameহয় nil। আপনি কি এমন দৃশ্যের বর্ণনা দিতে পারবেন যেখানে এটি সত্য হবে না?
ম্যাসন জি। ঝুইটি

@ মেসনজি.জুইটি আমি শেষ প্রজেক্টের জন্য ডাব্লুউইউভিউ ভিউস সক্রিয়ভাবে ব্যবহার করেছিলাম, তবে তখন থেকে তাদের সাথে কিছুই করা হয়নি - তাই আমি সত্যিই আপনার প্রশ্নের উত্তর দিতে পারি না। উপরের পোস্ট করার সময় এটি কাজ করেছিল। যদিও vc.url নির্ধারণ না করে এটি কীভাবে কাজ করে তা আমি জানতে পারি না।
ডেভিড এইচ

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

3

অ্যালেন হুয়াং উত্তরের ভিত্তিতে

বিস্তারিত

  • এক্সকোড সংস্করণ 10.3 (10 জি 8), সুইফ্ট 5

লক্ষ্যগুলি

  • এর সাথে লিঙ্কগুলি সনাক্ত করুন target=“_blank”
  • push ওয়েবউইউ সহ কন্ট্রোলারটি দেখুন যদি বর্তমান কন্ট্রোলার থাকে navigationController
  • present অন্যান্য সমস্ত ক্ষেত্রে ওয়েবভিউ সহ কন্ট্রোলার দেখুন

সমাধান

webView.uiDelegate = self

// .....

extension ViewController: WKUIDelegate {
    func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? {
        guard   navigationAction.targetFrame == nil,
                let url =  navigationAction.request.url else { return nil }
        let vc = ViewController(url: url, configuration: configuration)
        if let navigationController = navigationController {
            navigationController.pushViewController(vc, animated: false)
            return vc.webView
        }
        present(vc, animated: true, completion: nil)
        return nil
    }
}

সম্পূর্ণ নমুনা

Info.plist

আপনার তথ্য.প্লেস্ট পরিবহন সুরক্ষা সেটিংসে যোগ করুন

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

ViewController

import UIKit
import WebKit

class ViewController: UIViewController {

    private lazy var url = URL(string: "https://www.w3schools.com/html/tryit.asp?filename=tryhtml_links_target")!
    private weak var webView: WKWebView!

    init (url: URL, configuration: WKWebViewConfiguration) {
        super.init(nibName: nil, bundle: nil)
        self.url = url
        navigationItem.title = ""
    }

    required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) }

    override func viewDidLoad() {
        super.viewDidLoad()
        initWebView()
        webView.loadPage(address: url)
    }

    private func initWebView() {
        let webView = WKWebView(frame: .zero, configuration: WKWebViewConfiguration())
        view.addSubview(webView)
        self.webView = webView
        webView.navigationDelegate = self
        webView.uiDelegate = self
        webView.translatesAutoresizingMaskIntoConstraints = false
        webView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true
        webView.rightAnchor.constraint(equalTo: view.safeAreaLayoutGuide.rightAnchor).isActive = true
        webView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor).isActive = true
        webView.leftAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leftAnchor).isActive = true
    }
}

extension ViewController: WKNavigationDelegate {
    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        guard let host = webView.url?.host else { return }
        navigationItem.title = host
    }
}

extension ViewController: WKUIDelegate {
    func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? {
        guard   navigationAction.targetFrame == nil,
                let url =  navigationAction.request.url else { return nil }
        let vc = ViewController(url: url, configuration: configuration)
        if let navigationController = navigationController {
            navigationController.pushViewController(vc, animated: false)
            return vc.webView
        }
        present(vc, animated: true, completion: nil)
        return nil
    }
}

extension WKWebView {
    func loadPage(address url: URL) { load(URLRequest(url: url)) }
    func loadPage(address urlString: String) {
        guard let url = URL(string: urlString) else { return }
        loadPage(address: url)
    }
}

Storyboards

সংস্করণ 1

এখানে চিত্র বর্ণনা লিখুন

সংস্করণ 2

এখানে চিত্র বর্ণনা লিখুন


হাই, ফেসবুকের সাথে লগইন করার পরে, কীভাবে একইভাবে ফেসবুক শেয়ারের জন্য শেয়ার উইন্ডো খুলবেন? আমি নতুন wkwebview তৈরির সাথে লগ ইন করেছি, এখন ব্যবহারকারী লগ ইন করেছেন? এখন কীভাবে শেয়ার উইন্ডো ট্র্যাক করবেন?
জামশেদ আলম

ধন্যবাদ, আপনার সমাধানটি আমার জীবন বাঁচায় :)
সম্রাট প্রামাণিক

2

এটি আমার পক্ষে কাজ করেছে:

-(WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures {

if (!navigationAction.targetFrame.isMainFrame) {


    WKWebView *newWebview = [[WKWebView alloc] initWithFrame:self.view.frame configuration:configuration];
    newWebview.UIDelegate = self;
    newWebview.navigationDelegate = self;
    [newWebview loadRequest:navigationAction.request];
    self.view = newWebview;

    return  newWebview;
}

return nil;
}

- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {

    decisionHandler(WKNavigationActionPolicyAllow);
}

- (void)webViewDidClose:(WKWebView *)webView {
    self.view = self.webView;
}

যেমন আপনি দেখতে পাচ্ছেন, আমরা এখানে যা করছি তা কেবলমাত্র webViewনতুন ইউআরএল দিয়ে একটি নতুন খোলার এবং বন্ধ হওয়ার সম্ভাবনাকে নিয়ন্ত্রণ করছে, কেবলমাত্র যদি second webviewপ্রথমে প্রদর্শিত হওয়ার জন্য আপনার কাছ থেকে প্রতিক্রিয়া প্রয়োজন ।


1

আমি এমন কিছু সমস্যার মুখোমুখি হয়েছি যা কেবল ব্যবহার করে সমাধান করা যায় না webView.load(navigationAction.request)। তাই আমি এটি করতে একটি নতুন ওয়েবভিউ তৈরি করতে ব্যবহার করি এবং এটি ঠিক কাজ করে।

//MARK:- WKUIDelegate
func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? {
    NSLog(#function)

    if navigationAction.targetFrame == nil {
        NSLog("=> Create a new webView")

        let webView = WKWebView(frame: self.view.bounds, configuration: configuration)
        webView.uiDelegate = self
        webView.navigationDelegate = self

        self.webView = webView

        return webView
    }
    return nil
}

0
**Use following function to create web view**

func initWebView(configuration: WKWebViewConfiguration) 
{
        let webView = WKWebView(frame: UIScreen.main.bounds, configuration: configuration)
        webView.uiDelegate = self
        webView.navigationDelegate = self
        view.addSubview(webView)
        self.webView = webView
    }

**In View Did Load:**

 if webView == nil { initWebView(configuration: WKWebViewConfiguration()) }
   webView?.load(url: url1)


**WKUIDelegate Method need to be implemented**

extension WebViewController: WKUIDelegate {

    func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? {
        // push new screen to the navigation controller when need to open url in another "tab"
        print("url:\(String(describing: navigationAction.request.url?.absoluteString))")
        if let url = navigationAction.request.url, navigationAction.targetFrame == nil {
            let viewController = WebViewController()
            viewController.initWebView(configuration: configuration)
            viewController.url1 = url
            DispatchQueue.main.async { [weak self] in
                self?.navigationController?.pushViewController(viewController, animated: true)
            }
            return viewController.webView
        }

        return nil
    }
}

extension WKWebView 

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