2016-08-02 7 views
7

मैं अलग-अलग webView में एक ही साइट के कई खातों को लॉगिन करना चाहता हूं। उदाहरण के लिए मेरे पास Tab Bar Controller है जिसमें तीन नियंत्रक और प्रत्येक नियंत्रक देखें में webView शामिल हैं। और उदाहरण के लिए मैं प्रत्येक कक्षा में webView के लिए stackoverflow यूआरएल एम्बेड करता हूं। इन तीन webView का उपयोग कर एक ही समय में उपयोगकर्ता विभिन्न खातों में कैसे लॉगिन कर सकता है? मैंने कोशिश की है लेकिन मैं एक समय में एक उपयोगकर्ता को लॉगिन कर सकता हूं। मुझे पता चला है कि मुझे प्रत्येक UIWebView के लिए अलग cookie बनाने की आवश्यकता है, लेकिन अधिकतर उत्तर उद्देश्य-सी में हैं और उचित उत्तर नहीं चाहते हैं। उदाहरण के लिए (FirstSecondThird) क्या कोई मुझे बता सकता है कि मैं इसे कैसे कर सकता हूं?दो के लिए अलग कुकी स्टोरेज (UIWebView या WKWebView)

class FirstViewController: UIViewController , UIWebViewDelegate{ 

    @IBOutlet weak var webView: UIWebView! 
    @IBOutlet weak var activityIndicator: UIActivityIndicatorView! 

    override func viewDidLoad() { 
     webView.delegate = self 
     let requestURL = NSURL(string: "http://stackoverflow.com") 
     let request = NSURLRequest(URL: requestURL!) 
     activityIndicator.hidesWhenStopped = true 
     activityIndicator.startAnimating() 
     webView.loadRequest(request) 

    } 
     func webViewDidFinishLoad(webView: UIWebView) { 
     activityIndicator.stopAnimating() 
    } 

} 

class SecondViewController: UIViewController, UIWebViewDelegate{ 

    @IBOutlet weak var webView: UIWebView! 
    @IBOutlet weak var activityIndicator: UIActivityIndicatorView! 

    override func viewDidLoad() { 
     webView.delegate = self 
     let requestURL = NSURL(string: "http://stackoverflow.com") 
     let request = NSURLRequest(URL: requestURL!) 
     activityIndicator.hidesWhenStopped = true 
     activityIndicator.startAnimating() 
     webView.loadRequest(request) 

    } 
     func webViewDidFinishLoad(webView: UIWebView) { 
     activityIndicator.stopAnimating() 
    } 


} 

धन्यवाद

The preview of my executing code.

+0

मैंने अलग कुकी जार या भंडारण प्रति (uiwebview, wkwebview) के बारे में कई पोस्ट पढ़ी लेकिन मुझे कोई मदद नहीं मिली। मैं जांचता हूं कि ओएस एक्स में भी बहुत मुश्किल है (http://stackoverflow.com/questions/364219/how-can-i-have-multiple-instances-of-webkit-without-sharing-cookies) (http: // stackoverflow.com/questions/28456789/separate-cookie-jar-per-webview-in-os-x) (https://github.com/jjconti/swift-webview-isolated) (https://github.com/ साइयुएन/एडीक्यूकीइस्लेटेड वेबव्यू) किसी को भी कोई विचार है कि मैं इसे कैसे प्राप्त कर सकता हूं ?? – ZAFAR007

+0

क्या आपने [यह] कोशिश की (http://igisolatedcookiewebview.googlecode.com/)? – ddb

+0

@ddb हाँ मैं इसे जांच रहा था लेकिन यह ओएस एक्स के लिए है। कोको मैक विकास ढांचा है। यह आईओएस पर मौजूद नहीं है। – ZAFAR007

उत्तर

4

आप WKWebSiteDataStore के विभिन्न उदाहरणों का उपयोग करके WKWebView के साथ ऐसा कर सकते हैं: दुर्भाग्य से

let configuration1 = WKWebViewConfiguration() 
configuration1.websiteDataStore = WKWebsiteDataStore.nonPersistent() 
self.webView1 = WKWebView(frame: CGRect.zero, configuration: configuration1) 
self.view.addSubview(self.webView1) 

let configuration2 = WKWebViewConfiguration() 
configuration2.websiteDataStore = WKWebsiteDataStore.nonPersistent() 
self.webView2 = WKWebView(frame: CGRect.zero, configuration: configuration2) 

, आप इस तरह कुकीज़ के रूप में webView डेटा (खो देंगे, कैश , आदि) ऐप पुनरारंभ करने के बाद, क्योंकि गैर-लगातार WKWebsiteDataStore सहेजा नहीं जा सकता ओ डिस्क (आप देख सकते हैं कि WKWebsiteDataStoreNSCoding लागू करता है, लेकिन यह गैर-निरंतर स्टोर के लिए काम नहीं करता है)।

+0

Ermolov, धन्यवाद। मुझे [WKWebSiteDataStore] देखा गया था (https://developer.apple.com/library/ios/documentation/WebKit/Reference/WKWebsiteDataStore_Class_Ref/), लेकिन यह केवल आईओएस 9 में उपलब्ध है। क्या आपको कोई आइडिया है कि मैं इसे कैसे कर सकता हूं आईओएस 8. इसके अलावा मैं आपके कोड की जांच करता हूं यह मुझे त्रुटि देता है ** टाइप करें 'WKWebsiteDataStore' में कोई सदस्य 'nonPersistent' ** है ?? – ZAFAR007

+0

आईओएस 8 में उपलब्ध 'WKWebViewConfiguration' में विधि' nonPersistentDataStore' और निजी संपत्ति '_WKWebsiteDataStore * _websiteDataStore' के साथ निजी वर्ग' _WKWebsiteDataStore' हैं। आप रनटाइम फ़ंक्शंस का उपयोग करके इस कक्षा का उदाहरण बना सकते हैं (उद्देश्य-सी में रनटाइम के बारे में जानें)। साथ ही, आपको यह जानना होगा कि ऐप्पल उत्पादन कोड में निजी कक्षाओं/विधियों का उपयोग करने पर रोक लगाता है, लेकिन आप इसे अपने परीक्षण प्रोजेक्ट में आजमा सकते हैं। स्विफ्ट के संस्करण से संबंधित त्रुटि आप उपयोग कर रहे हैं। मैं स्विफ्ट 3 (एक्सकोड 8 बीटा) का उपयोग करता हूं, आपको विधि का नाम 'nonPersistentDataStore' में बदलने की आवश्यकता हो सकती है। –

+0

धन्यवाद अब यह काम करता है। आपका मतलब है कि मैं केवल परीक्षण परियोजना के लिए निजी वर्ग/विधियों का उपयोग कर सकता हूं न कि ऐप स्टोर पर तैनाती के लिए। मेरे पास आपके लिए एक और सवाल है, क्या आप कृपया बता सकते हैं कि अगली बार wkwebview खोलने के लिए इस विधि का उपयोग करके स्टोरेज पर कुकी को सहेजने का कोई तरीका है, जहां से मैं इसे पुनरारंभ करने के बाद छोड़ देता हूं ?? – ZAFAR007

संबंधित मुद्दे