दिलचस्प पोस्ट
पायथन फ़ंक्शन कॉल से stdout आउटपुट कैसे कैप्चर करें? स्विफ्ट आईओएस में डिवाइस ओरिएंटेशन सेट करना स्विच स्टेटमेंट में चर क्यों घोषित नहीं किया जा सकता है? हास्केल में `डेटा` और` नयाप्रकार` के बीच का अंतर कैसे बास में स्ट्रिंग चर को जोड़ने के लिए? आह्वान (प्रतिनिधि) कैसे angularjs e2e प्रक्षेपक परीक्षण में फ़ाइल अपलोड करें माउस स्थिति प्राप्त करें एक पीएनजी छवि सर्वर-साइड को कैसे सहेज सकता है, बेस 64 डेटा स्ट्रिंग से एंड्रॉइड ऐप से प्रमाणपत्र फिंगरप्रिंट प्राप्त करें MySQL एक चर आकार चर सूची के साथ तैयार बयान कितना ओवरहेड SSL लागू है? स्कैनर डबल वैल्यू – इनपुट मेस्मेस्ट अपेशन आप asp.net MVC में ~ / दृश्य फ़ोल्डर के अंतर्गत स्थिर .html फ़ाइलों का अनुरोध कैसे करते हैं? एएसपी.एन.टी. में, सत्र का उपयोग कब करना चाहिए? सीरियल () के बजाय सत्र। ऐबैंडन ()?

सफारी में UIWebViewView लिंक खोलें

मेरे आवेदन बंडल की सामग्री के साथ मेरे पास बहुत आसान UIWebView है वेब दृश्य में की बजाय मैं Safari में खोलने के लिए वेब दृश्य में कोई लिंक चाहता हूं। क्या यह संभव है?

वेब के समाधान से एकत्रित समाधान "सफारी में UIWebViewView लिंक खोलें"

इस UIWebView प्रतिनिधि को जोड़ें:

(नेविगेशन प्रकार की जांच करने के लिए संपादित किया गया था। आप file:// माध्यम से भी जा सकते हैं file:// अनुरोध जो सापेक्ष लिंक होंगे)

 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { if (navigationType == UIWebViewNavigationTypeLinkClicked ) { [[UIApplication sharedApplication] openURL:[request URL]]; return NO; } return YES; } 

स्विफ्ट वर्शन:

 func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool { if navigationType == UIWebViewNavigationType.LinkClicked { UIApplication.sharedApplication().openURL(request.URL!) return false } return true } 

स्विफ्ट 3 संस्करण:

 func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool { if navigationType == UIWebViewNavigationType.linkClicked { UIApplication.shared.openURL(request.url!) return false } return true } 

अद्यतन करें

openURL को IOS 10 में बहिष्कृत openURL दिया गया है:

 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { if (navigationType == UIWebViewNavigationTypeLinkClicked ) { UIApplication *application = [UIApplication sharedApplication]; [application openURL:[request URL] options:@{} completionHandler:nil]; return NO; } return YES; } 

अगर कोई आश्चर्य करता है, ड्रॉवनॉन्वर्ड का समाधान स्विफ्ट में ऐसा दिखेगा:

 func webView(webView: UIWebView!, shouldStartLoadWithRequest request: NSURLRequest!, navigationType: UIWebViewNavigationType) -> Bool { if navigationType == UIWebViewNavigationType.LinkClicked { UIApplication.sharedApplication().openURL(request.URL) return false } return true } 

उपयोगकर्ता 306253 के उत्तर में एक त्वरित टिप्पणी: इसके साथ सावधानी, जब आप UIWebView में कुछ लोड करने की कोशिश करते हैं (यानी कोड से भी), तो यह विधि इसे होने से रोकी जाएगी

इसे रोकने के लिए आप (धन्यवाद वेड) क्या कर सकते हैं:

 if (inType == UIWebViewNavigationTypeLinkClicked) { [[UIApplication sharedApplication] openURL:[inRequest URL]]; return NO; } return YES; 

आप UIWebViewNavigationTypeFormSubmitted और UIWebViewNavigationTypeFormResubmitted प्रकारों को भी संभालना चाहते हैं।

अन्य उत्तरों में एक समस्या है: वे आपके द्वारा किए गए कार्य पर निर्भर करते हैं और लिंक पर स्वयं तय करने के लिए नहीं करते हैं कि इसे सफारी में या वेबव्यू में लोड करना है या नहीं।

अब कभी-कभी ये वही है जो आप चाहते हैं, जो ठीक है; लेकिन कुछ अन्य समय, खासकर यदि आपके पृष्ठ में एंकर लिंक हैं, तो आप वास्तव में सफारी में केवल बाहरी लिंक खोलना चाहते हैं, आंतरिक रूप से नहीं। उस स्थिति में आपको अपने अनुरोध की URL.host संपत्ति की जांच करनी चाहिए।

मैं कोड के उस टुकड़े का उपयोग करने के लिए यह जांचने के लिए उपयोग कर रहा हूं कि क्या मेरे यूआरएल में एक मेजबाननाम है जिसे पार्स किया जा रहा है, या यदि यह html एम्बेड किया गया है:

 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { static NSString *regexp = @"^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9-]*[a-zA-Z0-9])[.])+([A-Za-z]|[A-Za-z][A-Za-z0-9-]*[A-Za-z0-9])$"; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regexp]; if ([predicate evaluateWithObject:request.URL.host]) { [[UIApplication sharedApplication] openURL:request.URL]; return NO; } else { return YES; } } 

आप अपनी आवश्यकताओं के अनुरूप नियमित अभिव्यक्ति को अनुकूलित कर सकते हैं।

स्विफ्ट में आप निम्न कोड का उपयोग कर सकते हैं:

 extension YourViewController : UIWebViewDelegate { func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool { if let url = request.URL where navigationType == UIWebViewNavigationType.LinkClicked { UIApplication.sharedApplication().openURL(url) return false } return true } } 

सुनिश्चित करें कि आप URL मान और नेविगेशन टाइप की जांच करते हैं।

यहां डैडॉनवर्ड के उत्तर के एक्सएमरिन आईओएस समतुल्य है

 class WebviewDelegate : UIWebViewDelegate { public override bool ShouldStartLoad (UIWebView webView, NSUrlRequest request, UIWebViewNavigationType navigationType) { if (navigationType == UIWebViewNavigationType.LinkClicked) { UIApplication.SharedApplication.OpenUrl (request.Url); return false; } return true; } } 

मेरे मामले में मैं यह सुनिश्चित करना चाहता हूं कि वेब दृश्य में बिल्कुल भी सब कुछ प्रारंभिक लोड को छोड़कर सफारी को खोलता है और इसलिए मैं इसका उपयोग करता हूं …

 - (BOOL)webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType { if(inType != UIWebViewNavigationTypeOther) { [[UIApplication sharedApplication] openURL:[inRequest URL]]; return NO; } return YES; } 

स्वीकृत उत्तर काम नहीं करता है

यदि आपका पृष्ठ यूआरएल के माध्यम से यूआरओ लोड करता है, तो navigationType UIWebViewNavigationTypeOther होगा। दुर्भाग्य से, जिसमें पृष्ठभूमि पृष्ठ लोड भी शामिल हैं जैसे एनालिटिक्स।

पृष्ठ नेविगेशन का पता लगाने के लिए, आपको [request URL] तुलना [request mainDocumentURL]

यह समाधान सभी मामलों में काम करेगा:

 - (BOOL)webView:(UIWebView *)view shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)type { if ([[request URL] isEqual:[request mainDocumentURL]]) { [[UIApplication sharedApplication] openURL:[request URL]]; return NO; } else { return YES; } }