2011-06-21 16 views
119

मैं एक UIWebView एक बहुत ही सरल परीक्षण पृष्ठ (test.html) लोड हो रहा है के साथ एक बहुत ही सरल iOS एप्लिकेशन है:लोड संसाधनों UIWebView में स्थानीय एचटीएमएल का उपयोग कर

<html> 
<body> 
<img src="img/myimage.png" /> 
</body> 
</html> 

मैं में इस test.html फ़ाइल लोड अपने वेब दृश्य:

NSURL *url = [[NSBundle mainBundle] URLForResource:@"test" withExtension:@"html"]; 
NSString *html = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil]; 
NSURL *baseUrl = [NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]]; 
[webView loadHTMLString:html baseURL:baseUrl]; 

यह ठीक काम करता है अगर मैं रिश्तेदार पथ के बिना चित्र को संदर्भित और लक्ष्य के तहत रूट पथ में संदर्भित छवि डाल - XCode भीतर> कॉपी बंडल संसाधन, हालांकि मैं यह करने के लिए नहीं मिल सकता है मेरे एचटीएमएल फाइल में दिखाए गए सापेक्ष पथ के साथ काम करें। ऐसा करने का एक तरीका होना चाहिए, मेरे पास बहुत सारी छवियां, सीएसएस, जावास्क्रिप्ट फ़ाइलें हैं जिन्हें मैं वेबव्यू में लोड करना चाहता हूं और मुझे रूट में सब कुछ नहीं रखना है और मेरे वेब में सभी संदर्भों को बदलना है एप्लिकेशन।

उत्तर

281

यह लोड करने के लिए कैसे/सापेक्ष संदर्भों के साथ एक स्थानीय एचटीएमएल का उपयोग करें।

  1. खींचें अपने Xcode प्रोजेक्ट में संसाधन (मैं अपने खोजक से एक फ़ोल्डर नामित www घसीटा विंडो) आपके पास दो विकल्प "किसी भी जोड़ा फ़ोल्डरों के लिए समूह बना" मिल जाएगा और "फ़ोल्डर किसी भी जोड़ा फ़ोल्डरों के लिए संदर्भ बना"।
  2. विकल्प "फ़ोल्डर संदर्भ बनाने .." का चयन करें।
  3. उपयोग नीचे दिए गए कोड यह एक आकर्षण की तरह काम करना चाहिए।

    NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"index" ofType:@"html" inDirectory:@"www"]];
    [webview loadRequest:[NSURLRequest requestWithURL:url]];

अब आपके सभी संबंधित लिंक्स html में (img/.gif, जे एस/ .js) की तरह हल करना चाहिए।

स्विफ्ट 3

if let path = Bundle.main.path(forResource: "dados", ofType: "html", inDirectory: "root") { 
     webView.load(URLRequest(url: URL(fileURLWithPath: path))) 
    } 
+1

सुपर और अप वोट दिया! क्या कोई बता सकता है कि "किसी भी अतिरिक्त फ़ोल्डर्स के लिए समूह बनाने के लिए" विरोध के रूप में फ़ोल्डर संदर्भ क्यों बनाएं "? – Sean

+3

एक sidenote के रूप में, यदि आप छवियों के विपरीत जावास्क्रिप्ट फ़ाइलों को लोड करने का प्रयास कर रहे हैं, तो आपको इसे भी देखना होगा: http : //stackoverflow.com/a/3629479/385619 – Willster

+1

क्या होगा यदि निर्देशिका * n * फ़ोल्डर्स गहरी है? क्या निर्देशिका तर्क के लिए '@" www/app "जैसे स्ट्रिंग को पास करना ठीक है? – ray

5

मैं एक लाइन में सब कुछ crammed (बुरा मुझे पता है) और इसके साथ कोई मुसीबतों था:

[webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"test" 
                             ofType:@"html"] 
                  isDirectory:NO]]];   
+1

लक्ष्य नोड के तहत आपकी छवि के लिए एक्सकोड प्रोजेक्ट में क्या आप "प्रोजेक्ट से संबंधित" या "समूह को संलग्न करने के सापेक्ष" का उपयोग करते हैं? मैं प्रोजेक्ट से सापेक्ष उपयोग कर रहा था क्योंकि जानकारी प्राप्त करने के संवाद में जब मैं प्रोजेक्ट से संबंधित चुनता हूं तो यह सही दिखता है। हालांकि जब मैं संलग्न समूह के सापेक्ष चयन करता हूं तो यह छवि को सही ढंग से लोड करता प्रतीत होता है। अब मैं जावास्क्रिप्ट और सीएसएस और सभी के साथ सही ढंग से काम करने के लिए अपना पूरा पृष्ठ प्राप्त करने के लिए गया हूं, धन्यवाद! –

+0

उह! यह uiwebview इतना नाजुक है, मैंने धीरे-धीरे अपने परीक्षण पृष्ठ में अधिक जटिल परीक्षण जोड़ना शुरू किया (यानी आईएमजी टैग में इनलाइन की बजाय सीएसएस के साथ छवि को सेट करना) और यह काम नहीं कर रहा था इसलिए मैं मूल रूप से वापस लौटा और यह नहीं किया फिर से काम नहीं करते! हो सकता है कि मैं अपने यूईवेब्यूव में कुछ प्रकार के कैशिंग से निपट रहा हूं? –

0

मैं वापस चला गया और परीक्षण किया है और यह फिर से परीक्षण किया है, यह है कि एक ही रास्ता मैं कर सकते हैं प्रकट होता है इसे काम करने के लिए प्राप्त करें (क्योंकि मेरे पास आईएमजी फ़ोल्डर में कुछ फ़ाइलें हैं और कुछ जेएस/सीएसएस, आदि में हैं ...) एचटीएमएल में मेरी छवि के सापेक्ष पथ का उपयोग नहीं करना है और सब कुछ बंडल फ़ोल्डर में संदर्भित है। क्या एक शर्म की बात है :(।

<img src="myimage.png" /> 
5

मैं बस ऐसा करते हैं:

UIWebView *webView = [[[UIWebView alloc] init] autorelease]; 

    NSURL *url = [[NSBundle mainBundle] URLForResource:@"index" withExtension:@"html"]; 
    NSURLRequest* request = [NSURLRequest requestWithURL:url]; 
    [webView loadRequest:request]; 

कहाँ "index.html" अपेक्षाकृत छवियों, सीएसएस, जावास्क्रिप्ट, आदि

23

का संदर्भ स्विफ्ट में:

func pathForResource (नाम: स्ट्रिंग ?, टाइप टाइप ई xt: स्ट्रिंग ?, डायरेक्टरी उपपथ: स्ट्रिंग?) -> स्ट्रिंग?
- नाम: एचएमटीएल का नाम;
- ऑफ़ टाइप टाइप: फ़ाइल के प्रकार के लिए एक्सटेंशन। इस मामले में "एचटीएमएल";
- डायरेक्टरी उपपथ: फ़ाइल जहां फ़ाइल है।इस मामले में फ़ाइल रूट फ़ोल्डर में है;

let path = NSBundle.mainBundle().pathForResource("dados", ofType: "html", inDirectory: "root") 
    var requestURL = NSURL(string:path!); 
    var request = NSURLRequest(URL:requestURL); 

    webView.loadRequest(request) 
+0

स्विफ्ट कोड के लिए धन्यवाद। स्वीकृत उत्तर –

+0

स्वागत के साथ अच्छी तरह से काम किया! :।) @ बाला विष्णु – Weles

+0

बहुत अच्छा काम करता है, मुझे 'requestURL' को अनदेखा करना पड़ा। – RRikesh

2

स्विफ्ट जवाब 2.

UIWebView Class Reference webView.loadRequest (अनुरोध) का उपयोग कर के खिलाफ सलाह देता है:

स्थानीय HTML फ़ाइलों को लोड करने के लिए इस विधि का उपयोग न करें; इसके बजाय, लोड HTMLString का उपयोग करें: baseURL:।

इस समाधान में, HTML को एक स्ट्रिंग में पढ़ा जाता है। एचटीएमएल का यूआरएल पथ का काम करने के लिए प्रयोग किया जाता है, और इसे बेस यूआरएल के रूप में पास करता है।

let url = bundle.URLForResource("index", withExtension: "html", subdirectory: "htmlFileFolder") 
let html = try String(contentsOfURL: url) 
let base = url.URLByDeletingLastPathComponent 
webView.loadHTMLString(html, baseURL: base) 
+0

यदि यह मामला है, तो यह संदर्भ देना अच्छा होगा कि मैन्युअल में यह कहां से सलाह देता है और उस पृष्ठ से एक अंश सम्मिलित करें - इस समय संदर्भ के बिना यह बहुत अधिक लगता है। –

0

@ स्विफ्ट 3 में sdbrain का जवाब:

let url = URL.init(fileURLWithPath: Bundle.main.path(forResource: "index", ofType: "html", inDirectory: "www")!) 
    webView.loadRequest(NSURLRequest.init(url: url) as URLRequest) 
0

स्विफ्ट 3.01 में का उपयोग कर WKWebView:

let localURL = URL.init(fileURLWithPath: Bundle.main.path(forResource: "index", ofType: "html", inDirectory: "CWP")!) 
myWebView.load(NSURLRequest.init(url: localURL) as URLRequest) 

यह 3.01 में बेहतर वाक्य रचना परिवर्तनों में से कुछ के लिए समायोजित कर देता है और निर्देशिका संरचना रहता है जगह में आप संबंधित एचटीएमएल फाइलों को एम्बेड कर सकते हैं।

+0

एनएस उपसर्ग 3.x के बाद से प्रमुख नींव के प्रकार के लिए बाहर नहीं किया गया था? यह मेरे लिए चाल है, धन्यवाद! 'स्थानीय URL = URL.init (fileURLWithPath: Bundle.main दें।पथ (संसाधन के लिए: "अनुक्रमणिका", टाइप प्रकार: "एचटीएमएल", निर्देशिका में: "mapa_procesos")!) webView.loadRequest (URLRequest (url: localURL)) ' –

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