2012-12-06 10 views
5

मेरा UIWebview loadHtmlString का उपयोग कर स्थानीय HTML फ़ाइल लोड करता है। लोड किए गए पृष्ठ में अन्य स्थानीय HTML फ़ाइलों के साथ-साथ वास्तविक लिंक जो इंटरनेट का उपयोग करते हैं।आईफोन UIWebView loadHtmlString इतिहास में जोड़ा नहीं गया

मैं के साथ एक वापस बटन जोड़ लिया है:

अगर ([self.webView canGoBack]) [self.webView GoBack];

यह ठीक काम करता है सिवाय इसके कि यह loadHtmlString से लोड किए गए मूल पृष्ठ को नहीं पहचानता है।

उदाहरण के लिए, अगर मैं नेविगेट करें:
स्थानीय -> स्थानीय -> वेब
स्थानीय एक्स स्थानीय < - वेब (प्रथम वापस काम करता है, अगले करता है कुछ भी नहीं है।)

मैं वेबव्यू कैसे प्राप्त कर सकते हैं मूल पृष्ठ को पहचानने के लिए बैक बटन भी इसके लिए काम करता है? क्या मैं इसे किसी भी तरह वेबव्यू के इतिहास में जोड़ सकता हूं?

अग्रिम धन्यवाद!

मैं WebView, जिनमें से उपयोगकर्ता पहले पृष्ठ (भरी हुई loadHtmlString का उपयोग) पर था कि क्या नज़र रखी के लिए एक प्रतिनिधि बनाया:

+0

मैं तर्क दूंगा कि 'loadHtmlString:' सबसे सरल उपयोग मामलों के लिए सभी के लिए खराब अभ्यास है। आपको इसके बजाए एक स्थानीय वेब सर्वर चलाने पर विचार करना चाहिए। मुझे [कोकोएचटीपीएससेवर] (https://github.com/robbiehanson/CocoaHTTPServer) और [मूशा टेम्पलेट्स] (https://github.com/groue/GRMustache) के साथ सफलता मिली है। यदि आप एचटीएमएल/जावास्क्रिप्ट में अपना पूरा ऐप लिखने में सक्षम हैं, तो [Trigger.io] (https://trigger.io/) या इसी तरह का उपयोग करने पर विचार करें। –

+0

मेरा उपयोग मामला बहुत आसान था। बस प्रारूप जैसे पुस्तक के हिस्से के रूप में स्थिर पृष्ठों की सेवा। – Felix

+0

स्टेटिक पेज? बढ़िया, उन्हें अपने बंडल में सहेजें और मैं जिस तकनीक का वर्णन करता हूं उसका उपयोग करें http://stackoverflow.com/a/17557309/354144 –

उत्तर

5

मुझे एक ही समस्या थी। मैंने इतिहास का प्रबंधन करने की कोशिश की, लेकिन यह त्रुटि प्रवण है। अब मैंने इसका बेहतर समाधान खोज लिया है।

आप जो करना चाहते हैं वह केवल लोड रिक्वेस्ट को जोड़ना है: रिक्त करें और लोड करने के पहले इसे HTML प्लेरिंग/लोडडाटा कॉल करने से पहले प्लेसहोल्डर के रूप में बनाएं। फिर आप इतिहास की निगरानी से पूरी तरह से मुक्त हैं। Webview.canGoBack और canGoForward बस काम करेगा। बेशक, प्लेसहोल्डर पर वापस जाने के लिए आपको एक हैक की आवश्यकता होगी: रिक्त। आप इसे WebViewDidFinishLoad में कर सकते हैं।

समारोह जब आप loadHTMLString फोन में:: यहाँ कोड आकर्षण है संभाल करने के लिए

[weakSelf.fbWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]]; 
[weakSelf.fbWebView loadHTMLString:stringResponse baseURL:url]; 

कोड GoBack:

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    if ([webView.request.URL.absoluteString isEqualToString:@"about:blank"] 
     && ![webView canGoBack] && [webView canGoForward]) { 
    [weakSelf.fbWebView loadHTMLString:stringResponse baseURL:url]; 
    } 
} 

मुझे लगता है कि उन लोगों को भी loadHTMLString को संभालने के लिए इस समाधान का विस्तार संभव है यह पहला भार नहीं है। बस सभी स्ट्रिंग प्रतिक्रिया रिकॉर्ड करने के लिए एक स्टैक करके और प्रत्येक लोड HTML स्ट्रिंग पर रिक्त डालें। और हर बार वापस जाने के लिए ढेर पॉप: खाली।

+0

अच्छा समाधान है। धन्यवाद। लोड के बजाय – neobie

2

यहाँ वैकल्पिक हल मैं का उपयोग कर समाप्त हो गया है।

जब बैक बटन दबाया जाता है, और वेबव्यू अब वापस नहीं जा सकता है, और उपयोगकर्ता पहले पृष्ठ पर नहीं है, तो पहला पृष्ठ फिर से लोड होता है (loadHtmlString का उपयोग करके)। यहां प्रासंगिक कोड है:

if ([self.webView canGoBack]) 
    [self.webView goBack]; 
else 
{ 
    WebViewDelegate * customDel = (WebViewDelegate *) self.webView.delegate; 
    if (customDel.onFirstPage == NO) 
    { 
     // Load original local page. 
     [self.webView loadHTMLString:self.htmlStr baseURL:[[NSBundle mainBundle] bundleURL]]; 

     customDel.onFirstPage = YES; 
    } 
} 

यदि मैं एक और अधिक सुरुचिपूर्ण समाधान पॉप अप करता हूं, तो मैं थोड़ी देर के लिए यह उत्तर नहीं चुनूंगा।

उम्मीद है कि यह किसी की मदद करता है!

+1

यदि उपयोगकर्ता आपका एचटीएमएल पेज खोलता है, तो दूसरे यूआरएल के लिंक पर क्लिक करें, तो आप ** फर्स्टपेज ** पर टॉगल कैसे कर सकते हैं? – onmyway133

+0

मुझे लगता है कि इसमें एक बग है। मान लें कि आप loadAString के साथ साइट ए पर उतरे हैं। फिर बी पर जाएं, फिर सी पर जाएं। फिर वापस बी पर जाएं, और वापस ए पर जाएं। फिर यदि आप आगे जाते हैं, तो यह सीधे सी पर जाएगा। बी –

1

Cloud Xu के रूप में कहा कि तुम सिर्फ डमी एचटीएमएल प्रीलोड करने की है, इस तरह की जरूरत है:

webView.load(URLRequest(url: URL(string: "about:blank")!)) 
    webView.loadHTMLString("<html><body><b>Your page data</b></body></html>", baseURL: nil) 

बस और कुछ नहीं! स्विफ्ट 3

+0

loadRequest। बहुत बढ़िया जवाब! –

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