2010-12-03 15 views
17

मेरे पास UIWebView का उपयोग करके लागू किया गया मूल वेब ब्राउज़र है। मैंने देखा है कि कुछ पृष्ठों के लिए, UIWebViewDelegate विधियों में से कोई भी नहीं कहा जाता है।UIWebView: webViewDidStartLoad/webViewDidFinishLoad प्रतिनिधि URL को कुछ URL लोड करते समय कॉल नहीं किया जाता है

एक उदाहरण पृष्ठ जिसमें यह होता है: http://www.youtube.com/user/google

  1. लोड में UIWebView [नोटिस यूट्यूब यूआरएल ऊपर है कि यहाँ, UIWebViewDelegate तरीकों जब कहा जाता है मिलता है: यहाँ मुद्दा (आप अपने नियंत्रक के UIWebViewDelegate तरीकों में NSLog कॉल सम्मिलित सुनिश्चित कर लें) को चरणबद्ध कर रहे हैं पृष्ठ लोड]
  2. टच पेज
  3. टच उस श्रेणी में किसी भी वीडियो [मुद्दे पर "अपलोड" श्रेणी: सूचना है कि एक नया पृष्ठ लोड है, लेकिन UIWebView प्रतिनिधियों में से कोई भी कहा जाता है]

मुझे पता है कि यह UIWebView का प्रतिनिधि नहीं है जो ठीक से सेट नहीं किया जा रहा है, क्योंकि अन्य लिंक लोड करते समय प्रतिनिधि विधियों को लागू किया जाता है (उदा। यदि आप किसी लिंक पर क्लिक करने का प्रयास करते हैं जो आपको यूट्यूब के बाहर ले जाता है, तो आपको प्रतिनिधि विधियों को बुलाया जाएगा)।

शुरुआत में मेरा आंत महसूस करना था कि ऐसा इसलिए हो सकता है क्योंकि पृष्ठ AJAX का उपयोग करके लोड किया गया है, जो प्रतिनिधि विधि का आह्वान नहीं कर सकता है। लेकिन फिर जब मैंने आईफोन की सफारी की जांच की, तो उसने इस समस्या को प्रदर्शित नहीं किया, इसलिए यह मेरी तरफ कुछ होना चाहिए।

मैंने यह भी देखा है कि थ्री 20 के TTWebController में मेरे जैसा ही समस्या है।

लेकिन समस्या यह है कि इस मुद्दे से उत्पन्न होती है कि प्रतिनिधि तरीकों बुलाया के बिना, मैं सक्षम/अक्षम करने पीछे या आगे ब्राउज़िंग बटन जब नए अनुरोधों लोड किए गए हैं यूआई अद्यतन करने में असमर्थ हूँ है।

और विचार क्यों यह हो रहा है या मैं कैसे यूआई अद्यतन करने के लिए जब एक नया अनुरोध किया जाता है यह आस-पास काम कर सकते हैं?

+0

मुझे लगता है कि यह एक आईओएस बग हो सकता है? –

+0

मैं इस मुद्दे को आजमाने के लिए अपने मैक एटीएम पर नहीं हूं, लेकिन यह दिलचस्प है कि आपने उल्लेख किया है कि यह कुछ वीडियो पेज पर होता है। क्या यह हो सकता है कि पृष्ठ स्ट्रीमिंग के लिए कनेक्शन खोला गया हो? मैं प्रस्ताव दूंगा कि आप पृष्ठ URL के साथ NSURLRrquest बनाने का प्रयास करें और देखें कि HTML डेटा लोड होने के बाद कनेक्शन बंद हो रहा है या नहीं। – pmilosev

+0

अरे, क्या आपने कभी इस समस्या को हल किया है? मैं m.youtube.com के साथ खेल रहा हूं और यह एक दुःस्वप्न है। –

उत्तर

20

यह आईओएस बग नहीं है - पृष्ठ वास्तव में पुनः लोड नहीं हो रहा है। UIWebView प्रतिनिधि नए पेज अनुरोधों के बाद ट्रिगर किए गए हैं, लेकिन वह पृष्ठ ऐसा नहीं करता है।

बहुत सावधानीपूर्वक डेस्कटॉप सफारी में क्या होता है जब आप उस पृष्ठ पर वीडियो लिंक पर क्लिक करते हैं तो आप वर्णन करते हैं। सुनिश्चित करें कि आप पता बार पर ध्यान दें। पता बदल जाएगा, लेकिन गंभीर रूप से पृष्ठ को पुनः लोड नहीं करेगा।

यह सब जावास्क्रिप्ट द्वारा नियंत्रित किया जाता है, पृष्ठ को रीलोड करके नहीं। सीधे शब्दों में कहें, पेज कभी नहीं पुनः लोड, इसलिए वहाँ UIWebView प्रतिनिधियों के लिए कोई कारण नहीं के नाम से जाना है।

तुम मुझे विश्वास नहीं करते हैं, तो अंतिम तौर इस चरण आपको जावास्क्रिप्ट निष्क्रिय साथ वर्णन से दोहराने का प्रयास साबित करने के लिए। आप देखेंगे कि पृष्ठ पूरी तरह से अलग व्यवहार करता है।

- (BOOL)webView:(UIWebView *)_webview shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { 
    if (!_timer && [request.URL.absoluteString rangeOfString:@"youtube.com"].length != 0) { 
     _timer = [NSTimer scheduledTimerWithTimeInterval:0.5 
                target:self 
               selector:@selector(checkNavigationStatus) 
               userInfo:nil 
               repeats:YES]; 
    } 

    return YES; 
} 

//.... 
//.... 
//.... 

- (void)checkNavigationStatus 
{ 
    // Check if we can go forward or back 
    backButton.enabled = self.webView.canGoBack; 
    forwardButton.enabled = self.webView.canGoForward; 
} 
+1

हम्म ... दिलचस्प। आपके उत्तर के लिए धन्यवाद। तो, पृष्ठ को बदलने में जावास्क्रिप्ट शामिल होने पर किसी को इस तरह की घटना में कैसे लगाया जाना चाहिए? मुझे यह जानने की ज़रूरत है कि यह विशेष बात इसलिए हुई है कि मैं बैक/फॉरवर्ड बटन की उपलब्धता अपडेट करता हूं। सफारी इसे सही ढंग से संभालने लगते हैं, इसलिए इसे करने का एक तरीका होना चाहिए। –

+0

मुझे लगता है कि जब ऐसा होता है तो आप कॉलबैक प्राप्त करने के लिए शायद जावास्क्रिप्ट का उपयोग कर सकते हैं? डेस्कटॉप सफारी में बैक बटन काम देखने का कारण जावास्क्रिप्ट की वजह से है जो इतिहास को लिखता है, इंप्रेशन देते हुए आपने पेज को फिर से लोड किया है जब आपने वास्तव में AJAX'd कॉल किया है (Google जीमेल में इस तकनीक का उपयोग करता है पुरे समय)। मुझे लगता है कि मोबाइल सफारी लागू नहीं कर रहा है क्योंकि डेस्कटॉप करता है। मैं एक जेएस विशेषज्ञ नहीं हूं, इसलिए मुझे नहीं पता कि इसके साथ कहां से शुरुआत करें। – lxt

+0

हम्म, मुझे यकीन नहीं है कि यह वास्तव में यहां क्या हो रहा है। मैं आईफोन पर मोबाइल सफारी का जिक्र कर रहा था, जो सटीक उसी साइट का उपयोग करके इस तरह की कोई समस्या प्रदर्शित नहीं करता है। मैं अभी भी एक स्पष्टीकरण के लिए एक नुकसान में हूँ। –

1

इस अच्छा समाधान लेकिन im बटन की स्थिति को अपडेट करने के लिए NSTimer का उपयोग नहीं है। यह आईओएस 4.2 में काम करता है।

+0

यह मेरे लिए काम करता है। – ZYiOS

-3

ऐसा लगता है कि यह आईओएस 4.2 में ठीक किया गया:

+4

यह सही नहीं है ... –

+0

यह आईओएस 5.1 – adamdehaven

+0

के रूप में भी हल नहीं किया गया 6.1 में भी – sleepwalkerfx

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