2015-04-11 13 views
5

मेरा ऐप UIWebView के अंदर एक बहुत बड़ा वेबैप लोड करता है।WKWebView और NSURLCache स्थानीय सामग्री की सेवा के लिए

मैंने NSURLCache एक्सटेंशन "LocalCache" लिखा है।

यह LocalCache एक्सटेंशन मेरे वेबैप लोडिंग को रोकता है, और एन्क्रिप्टेड स्थानीय ऐप बंडल से सभी अनुरोधित फ़ाइलों को सेवा देता है। यह तर्क NSURLCache'scachedResponseForRequest विधि में लागू किया गया है। तो अनुप्रयोग 100% स्थानीय स्तर पर पेश किया जाता है:

class LocalCache:NSURLCache { 
    override func cachedResponseForRequest(request: NSURLRequest) -> NSCachedURLResponse? { 
     if (request points to my domain) { 
      get file from bundle 
      decrypt it 
      return local copy 
     } else { 
      return super.cachedResponseForRequest(request) 
     } 
    } 
} 

NSURLCache.setSharedURLCache(LocalCache()); 

मैं WKWebkit को यह कार्यक्षमता बंदरगाह करना चाहते हैं। मुझे आश्चर्य है कि अगर कुछ ऐसा लागू करने का कोई तरीका है, दुर्भाग्यवश, जैसा कि आप शायद जानते हैं, WKWebView एनएसपीआरोटोकॉल, एनएसयूआरएल, एनएसयूआरएल कैश के साथ कोको स्टैक का उपयोग नहीं करता है .... मेरे वर्तमान दृष्टिकोण को बेकार कर रहा है।

तो, क्या कुछ ऐसा ही WkWebView के साथ पूरा किया जा सकता है?

नोट: तथ्य यह है कि UiWebView "सोचता है" कि मेरा ऐप रिमोट सर्वर से आता है एप्लिकेशन के लिए महत्वपूर्ण है: यदि मैं सिर्फ स्थानीय रूप से एप्लिकेशन लोड करता हूं, यानी। file://, ऐसी कई चीजें हैं जो काम नहीं करती हैं, उदाहरण के लिए, YouTube वीडियो, जैसे यूट्यूब एपीआई शिकायत करता है कि "file://" अनुमोदित मूल नहीं है। तो WkWebView समाधान जो मैं ढूंढ रहा हूं उसे स्थानीय जावास्क्रिप्ट इंजेक्शन देने के बजाय कैश को अवरुद्ध करने से संबंधित होना चाहिए।

+1

"WKWebView अनुरोध करता है और सामग्री को आउट-ऑफ-प्रोसेस प्रस्तुत करता है, जिसका अर्थ है कि आपका ऐप उनके द्वारा किए गए अनुरोधों को नहीं सुनता है।" http://stackoverflow.com/a/24208322/23649 – jtbandes

+1

@rupps क्या आपको इसका कोई समाधान मिला है? मुझे एक समान समस्या है। मैं कोशिश कर रहा हूं [WKUserScript] (https://developer.apple.com/library/ios/documentation/WebKit/Reference/WKUserScript_Ref/#//apple_ref/occ/instm/WKUserScript/initWithSource:injectionTime:forMainFrameOnly :) । – Alex

उत्तर

1

मैं कुछ महीने पहले (NSRLProtocol/NSURLCache का उपयोग करके और UIWebView से WKWebView में माइग्रेट करना चाहता था) का उपयोग कर रहा था, और जो मैंने समाप्त किया वह मेरी फाइल/अनुरोधों को पूरा करने के लिए स्थानीय HTTP सर्वर का उपयोग करना था (https://github.com/mattstevens/RoutingHTTPServer)।

इससे मुझे एक अलग मुद्दे से निपटने में मदद मिली, जो UIWebView पर HTML5 वीडियो लोड करने से संबंधित था, क्योंकि कुछ श्रेणी अनुरोधों को UIWebView/NSURLCache द्वारा अवरुद्ध नहीं किया जा रहा था।

+0

हाय, यह एक अच्छा विचार है, मैंने थोड़ी देर के लिए आईओएस विकास को रोक दिया है लेकिन आखिरकार इसमें फिर से पहुंच जाएगा। उस समाधान के बारे में, मेरे लिए यह एक समस्या हो सकती है कि ऐप डोमेन स्थानीय होगा, और कुछ सेवाओं का उपयोग मैं उनके एपीआई तक पहुंच से इंकार कर देता हूं अगर अनुरोध मेजबान में चल रहे ऐप से नहीं आता है। यही कारण है कि दूसरा समाधान बहुत अच्छा था, वेबव्यू ने सोचा कि यह इंटरनेट से आया है! – rupps

+0

इसके अलावा, मुझे नहीं पता कि यह तब से बदल गया है, लेकिन मुझे WkWebView द्वारा दिए गए "प्रदर्शन बूस्ट" के साथ थोड़ा निराश हो गया। मैं एक सुंदर मांग ऐप चलाता हूं और कहूंगा कि प्रदर्शन वही है! – rupps

+0

भले ही माइग्रेटिंग के लिए मेरी प्रेरणाओं में से एक "प्रदर्शन बढ़ावा" था, मेरी मुख्य चिंता यह थी कि UIWebView को थोड़ी देर के लिए बहिष्कृत कर दिया गया है और मुझे डर है कि यह "काम करना बंद कर सकता है" या भविष्य के संस्करणों में भी हटाया जा सकता है। इसमें दो नलिकाओं से लंबे नल को अलग करने के लिए कुछ ह्यूरिस्टिक्स भी नहीं होते हैं (इसलिए जब तक आप जेएस पुस्तकालयों का उपयोग करने के लिए उपयोग नहीं करते हैं, तो आप हमेशा उस नस्ल पर 300,000 देरी देरी करते हैं), जो मैंने पहले ही WKWebView को पढ़ा है। –

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