2009-10-01 6 views
5

मैंने इसके लिए हर जगह देखा है, कुछ भी नहीं मिला। मुझे कुछ दिलचस्प कारणों से मूल रूप से अपने आईफोन के अंदर एक पूरी वेबसाइट स्टोर करने की आवश्यकता है। भले ही मैं यह नहीं समझ सकता कि इसे अपने UIWebView में सही तरीके से प्रदर्शित कैसे किया जाए।UIWebView स्थानीय रूप से संग्रहीत वेबसाइट (एचटीएमएल, छवियों, जावास्क्रिप्ट) प्रदर्शित करता है

संपादित करें:। मैं स्पष्ट करना चाहिए मैं मूल HTML फ़ाइल लोड कर सकते हैं, और मैं छोड़कर कुछ भी नहीं में जुड़े हुए हो जाता है, स्थानीय होने के लिए पथ का के सभी chagned है

यहाँ कोड

self.dataDetectorTypes = UIDataDetectorTypeLink; 
NSString *path = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"]; 
NSURL *url = [NSURL fileURLWithPath:path]; 
NSURLRequest *request = [NSURLRequest requestWithURL:url]; 
[self loadRequest:request]; 
है

index.html जे एस कोड के <script type="text/javascript" src="somescript.js">

कोई भी मार डाला जाता है

+0

क्या करता है "कुछ भी नहीं जुड़ा हुआ हो जाता है" यहाँ क्या मतलब है? –

उत्तर

13

ऐसा लगता है कि आप अपने बंडल के अंदर से HTML लोड कर रहे हैं। इसका मतलब है कि सभी अतिरिक्त फाइलें (.js, .css, और किसी भी मीडिया फ़ाइलों) को भी आपके बंडल में उपस्थित होने की आवश्यकता है। तो जांच करने वाली पहली बात यह है कि आप अपने निष्पादन योग्य सामग्री की सामग्री को देखें और सुनिश्चित करें कि जेएस, आदि फाइलें शामिल हैं।

यदि यह ठीक लग रहा है तो जांच करने के लिए अगली चीज़ यह है कि अगर एचटीएमएल, जेएस, या सीएसएस फाइल संबंधित या पूर्ण यूआरएल के माध्यम से सामग्री का संदर्भ देती हैं। यदि वेब सामग्री में एक पूर्ण पथ संदर्भ है तो UIWebView हर बार उस सामग्री को डाउनलोड करने का प्रयास करने जा रहा है, इसलिए यह केवल तब ही काम करेगा जब आपके पास नेट कनेक्शन हो। यदि पथ सापेक्ष है तो यह देखने के लिए बंडल में जा रहा है कि ऐसी फ़ाइल मौजूद है या नहीं।

जब आपने एक्सकोड प्रोजेक्ट फ़ाइल में एचटीएमएल और सामग्री शामिल की थी तो आपने संभवतः प्रोजेक्ट साइड-बार में फ़ाइल को खींच लिया था और उनसे पूछा गया था कि "किसी भी जोड़े गए फ़ोल्डर्स के लिए समूह बनाएं" या "फ़ोल्डर बनाएं" किसी भी जोड़ा फ़ोल्डर के लिए संदर्भ। "

डिफ़ॉल्ट पहला ऐसा है जिसका अर्थ है कि एक्सकोड आपके प्रोजेक्ट में एक पीला फ़ोल्डर बनाता है, लेकिन यह आउटपुट बंडल उत्पन्न करने के समय डिस्क पर निर्देशिका पदानुक्रम को अनदेखा कर देगा। यदि आप दूसरा विकल्प चुनते हैं तो फ़ोल्डर नीला है और यदि आप अपने आउटपुट बंडल में देखते हैं तो आप देखेंगे कि पूरे फ़ोल्डर पदानुक्रम को दोहराया गया है।

सरल वेब पृष्ठों के लिए पहला काम जहां सब कुछ एक ही फ़ोल्डर स्तर पर है और आप इसे लोड करने के लिए ऊपर सूचीबद्ध विधि का उपयोग कर सकते हैं। दूसरे मामले बेहतर काम करता है अगर अपने वेब पेज जटिल है और उप-फ़ोल्डर में सामग्री संदर्भ जिस स्थिति में आप एक रिश्तेदार पथ से वेब पृष्ठों (जैसे कि, 'वेबपेजों' फ़ोल्डर) लोड करने के लिए की जरूरत है:

NSString *path = [[NSBundle mainBundle] 
       pathForResource:@"index" ofType:@"html" 
        inDirectory:@"webpages"]; 

जांचने के लिए आखिरी बात यह है कि अगर एचटीएमएल फाइल में कोई बेस टैग हैं। यह किसी पृष्ठ पर सभी लिंक के लिए डिफ़ॉल्ट पता या लक्ष्य निर्दिष्ट करने का एक तरीका है, लेकिन यह वेबव्यू लिंक को जोड़ सकता है।

NSURL *url = [NSURL fileURLWithPath:path]; 

सेटअप एक baseurl और जावास्क्रिप्ट, सीएसएस, छवियों आदि जैसी चीजों के लिए .html फ़ाइल की तो संबंधित पथ काम नहीं करते नहीं करता है:

+0

यह लौरा है। मैं एक ही समस्या में फंस गया था और जब आप अपने समाधान का उपयोग करने की कोशिश की तो मेरे मामले में "पथ" शून्य वापस आती है। हालांकि मैंने दूसरे विकल्प का उपयोग करके एचटीएमएल फाइलों और संसाधनों को उसी तरीके से जोड़ा है, "किसी भी जोड़े गए फ़ोल्डर के लिए फ़ोल्डर संदर्भ बनाएं।" मैं क्या खो रहा हूँ क्रिप्या मेरि सहायता करे। मैं वास्तव में आभारी रहूंगा। – Aisha

+0

हाय लौरा। यदि "pathForResource" विधि शून्य लौट रही है तो इसका मतलब है कि यह फ़ाइल नहीं ढूंढ सकता है। कोशिश करने की एक बात यह है कि खोजक में अपनी "बिल्ड" निर्देशिका में बाइनरी .app फ़ाइल ढूंढना है, फिर उस पर राइट क्लिक करें और "पैकेज सामग्री दिखाएं"। यह दिखाता है कि ऐप के मुख्य बंडल में क्या शामिल है। अपनी एचटीएमएल फाइल के लिए अंदर देखो। यदि यह किसी फ़ोल्डर में है, तो उस फ़ोल्डर का नाम पथफॉर संसाधन कॉल के "इनडायरेक्टरी" पैरामीटर में होना चाहिए। यदि यह शीर्ष-स्तर पर है तो आपके पास फ़ोल्डर संदर्भ नहीं है। या तो इसे प्रोजेक्ट में हटाएं और फिर से खींचें या डायरेक्टरी के बिना पथफॉर रिसोर्स संस्करण का उपयोग करें। HTH। – Ramin

1

का एक समूह आप इस निर्धारित करने की आवश्यकता है:

myWebView.dataDetectorTypes = UIDataDetectorTypeLink 
7

समस्या यह है कि इस कॉल है। "Styles.css" सूचकांक में तरह

url = [NSURL URLWithString: [path lastPathComponent] 
      relativeToURL: [NSURL fileURLWithPath: [path stringByDeletingLastPathComponent] 
             isDirectory: YES]]; 

और फिर बातें:

इसके बजाय इस का उपयोग करें।एचटीएमएल फाइल आईएफएफ मिलेगी, उन्हें .html फ़ाइल के बगल में बंडल में कॉपी किया गया है।

0

सुनिश्चित करें कि .js फ़ाइलें संसाधन प्रतिलिपि अनुभाग में आपकी प्रतिलिपि में हैं और संकलन खंड में नहीं हैं। एक्सकोड उन्हें संकलित समूह में डिफ़ॉल्ट रूप से रखता है।

0

शब्दकोश में पथफोर संसाधन जोड़ते समय, यह एक शून्य स्ट्रिंग त्रुटि प्रदर्शित करता है।

0

मेरा प्रयास एक्सकोड प्रोजेक्ट फ़ाइल से एक संपूर्ण वेब पेज चलाने के लिए था। ऐसा करने के लिए आपको यह करना होगा:

  1. फ़ाइल आयात करते समय "किसी भी जोड़े गए फ़ोल्डर के लिए फ़ोल्डर संदर्भ बनाएं" का चयन करें।

  2. वेब दृश्य सेट अप करें, लेकिन सुनिश्चित करें कि आपने पहले उल्लेख किए गए सापेक्ष पथ को सेट किया है।

    NSString *path = [[NSBundle mainBundle] pathForResource:@"filename" 
                 ofType:@"html" 
                 inDirectory:@"Directory"]; 
    
    NSURL *url = [NSURL URLWithString:[path lastPathComponent] relativeToURL: 
         [NSURL fileURLWithPath: [path stringByDeletingLastPathComponent] 
          isDirectory:YES]]; 
    
    NSURLRequest *request = [NSURLRequest requestWithURL:url]; 
    
    [self.currentWebView loadRequest:request]; 
    
संबंधित मुद्दे