2016-05-07 9 views
11

जब मैं गूगल खोज कर रहा हूँ पर पुन: निर्देशित और उदाहरण के लिए Etsy.com पर क्लिक करने के WKWebView मुझे अपने iPhone पर स्थापित Etsy एप्लिकेशन ले जाते हैं। मैं इस व्यवहार को कैसे अक्षम कर सकता हूं? मैं WKWebView को etsy.com मोबाइल वेबसाइट पर रीडायरेक्ट करना चाहता हूं। मैं तेजी से उपयोग कर रहा हूँ।अक्षम WKWebView मेरे iPhone पर इंस्टॉल किए गए एप्लिकेशन

+0

आप 'WKNavigationDelegate' में लिंक को अवरुद्ध करने और वेबसाइट को स्वयं दिखाने का प्रयास कर सकते हैं। –

+0

क्या आप और अधिक समझा सकते हैं? – gal

+1

ज़रूर। यदि आप 'WKNavigationDelegate' को लागू करते हैं, तो विधि 'webView (_ webView: WKWebView, decololForNavigationAction NavationAction: WKNavigationAction, निर्णय हैंडलर निर्णय हैंडलर: (WKNavigationActionPolicy) -> शून्य) जब भी कोई लिंक क्लिक किया जाता है तो उसे कॉल किया जाना चाहिए। यह सुनिश्चित करने के लिए 'navigationAction.request.URL' प्रॉपर्टी देखें कि यह एटीसी नहीं है, उदाहरण के लिए; यदि ऐसा है, तो निर्णय लेंडलर का उपयोग करके नेविगेशन को रद्द करें और 'loadRequest() 'का उपयोग करके स्वयं वेबसाइट पर जाएं। उम्मीद है कि यह डीप लिंकिंग को रोक देगा। –

उत्तर

0

मैं Etsy एप्लिकेशन इंस्टॉल और पुष्टि की है कि खोज "Etsy" सफारी में और पहला परिणाम (etsy.com) दोहन Etsy एप्लिकेशन का शुभारंभ करेंगे है।

मैं Xcode में एक परीक्षण "एकल दृश्य आवेदन" बनाया है और बस ViewController के viewDidLoad के लिए नीचे लाइनों कहा: Etsy के लिए खोज और पहला परिणाम यह मेरे Etsy पर ले जाता है पर क्लिक करने के बाद

override func viewDidLoad() { 
    super.viewDidLoad() 

    let webView = WKWebView(frame:view.bounds, configuration: WKWebViewConfiguration()) 
    view.addSubview(webView) 
    webView.loadRequest(NSURLRequest(URL: NSURL(string: "https://www.google.com")!)) 
} 

। मेरे टेस्ट ऐप में कॉम (एटीसी ऐप पर कूद नहीं है)।

आप अपने कोड में कुछ और कि WKWebView रीडायरेक्ट अनुमति देने के लिए कारण हो सकता है क्या किया है?

6

दुर्भाग्य से, WKWebView स्वचालित रूप से संभाल करने के लिए आपके एप्लिकेशन पर वापस कस्टम योजनाओं के साथ यूआरएल नहीं भेजता है।

आप विशेष हैंडलिंग के बिना इस कोशिश है तो उसके बाद उपयोगकर्ता तीसरे पक्ष सेवा के साथ प्रमाणित करता है और अपने कॉलबैक प्राप्त नहीं करेंगे अपने वेब दृश्य लटका की तरह दिखाई देगा। आप मानक http या https योजना के साथ एक रीडायरेक्ट यूआरआई का उपयोग कर की कोशिश कर सकते हैं, लेकिन फिर WKWebView बस इसे लोड करने के लिए है, न कि संभाल करने के लिए अपनी मूल अनुप्रयोग के लिए वेब दृश्य से बाहर यह निर्देशन से कोशिश करेंगे।

func webView(webView: WKWebView, decidePolicyForNavigationAction navigationAction: WKNavigationAction, decisionHandler: ((WKNavigationActionPolicy) -> Void)) { 
     print("webView:\(webView) decidePolicyForNavigationAction:\(navigationAction) decisionHandler:\(decisionHandler)") 

     let app = UIApplication.sharedApplication() 
     let url = navigationAction.request.URL 
     let myScheme: NSString = "https" 
     if (url!.scheme == myScheme) && app.canOpenURL(url!) { 
      print("redirect detected..") 
      // intercepting redirect, do whatever you want 
      app.openURL(url!) // open the original url 
      decisionHandler(.Cancel) 
      return 
     } 

     decisionHandler(.Allow) 
    } 

आप पा सकते हैं:

आदेश रीडायरेक्ट संभाल करने में, आप अपने WKWebView की WebPolicyDelegate में decidePolicyForNavigationAction लागू करने के लिए कस्टम यूआरएल योजना का पता लगाने और अपने अनुप्रयोग को यह निर्देशित करने के लिए नियंत्रित किया जा करने की जरूरत है विस्तृत जानकारी here

+1

यह आईओएस 9-10 पर काम नहीं करता है ... जब मैं कस्टम स्कीम यूआरएल पर क्लिक करता हूं, तो तय करें पॉलिसीफॉरनविगेशन एक्शन कभी नहीं कहा जाता है। – Borzh

-1

सामान्य परिस्थितियों WKWebView एक 3 पार्टी ऐप्लिकेशन को खोलकर नहीं किया जाना चाहिए के बजाय वेब साइट के लिए जा रहा तहत - लेकिन मैं 2 अपवाद

के बारे में पता
  • आप स्पष्ट रूप से 3 पार्टी अनुप्रयोग
  • आईओएस बहुत सही काम नहीं कर रहा (ठीक करने के लिए उपकरण पुन: प्रारंभ) खोलने के लिए एक WKNavigationDelegate हैंडलर में कुछ कोड डाला है - वहाँ एक बग है, जो कभी-कभी हो रहा है आपके द्वारा वर्णित व्यवहार (आईओएस 10.2 में देखा गया) बनाता है
संबंधित मुद्दे