2012-01-30 13 views
9

जब भी मेरा वेबव्यू यूआरएल के बीच नेविगेट करता है तो मुझे एक सफेद फ्लैश मिल रहा है।कोको वेबव्यू नेविगेशन सफेद फ्लैश

दूसरे शब्दों में, वेबव्यू नेविगेशन के बीच एक असुरक्षित स्थिति में है, और केवल एप्लिकेशन के पृष्ठभूमि रंग को दिखाता है।

इस पर विचार करने के तरीके पर कोई विचार?

+0

यूआरएल आप स्थानीय या दूरदराज के लोड कर रहे हैं कर रहे हैं? सफारी एक ही लिंक को कैसे संभालता है? क्या आपने जावास्क्रिप्ट को अपने वेबकिट व्यू में सक्षम किया है? –

+0

यह स्थानीय यूआरएल और रिमोट यूआरएल के बीच एक फ्लैश है। सफारी हैंडल तुरंत संक्रमण है। हां, जावास्क्रिप्ट सक्षम है - नया पृष्ठ डाउनलोड होने पर वेबव्यू अन-रेंडर किया गया है। –

उत्तर

13

मुझे यह वही समस्या थी, (ज्यादातर) ने प्रति @ Justinvoss के suggestion on Twitter प्रति विंडो पर फ्लश को अक्षम करने के लिए तीन प्रतिनिधि तरीकों को लागू करके इसे ठीक किया।

खिड़की पर फ्लश अक्षम करते समय आपको बहुत सावधान रहने की आवश्यकता है क्योंकि यदि आप इसे अक्षम करते हैं तो आपका पूरा ऐप स्थिर हो जाता है, इसलिए मैं सुनिश्चित करता हूं कि मैं इसे कई बार नहीं करता और उन्हें ढेर करता हूं (-webView:didCommitLoadForFrame: को दस्तावेज किया गया है कभी कभी एक एकल लोड के लिए कई बार कहा जा) और गलती से खिड़की जमे हुए

@implementaton ViewControllerClass { 
    BOOL _windowFlushDisabled; 
} 


- (void)webView:(WebView *)sender didCommitLoadForFrame:(WebFrame *)frame; 
{ 
    if (!_windowFlushDisabled && sender.window) { 
     [sender.window disableFlushWindow]; 
     _windowFlushDisabled = YES; 
    } 
} 
- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame; 
{ 
    if (_windowFlushDisabled) { 
     [sender.window enableFlushWindow]; 
     [sender.window flushWindowIfNeeded]; 
     _windowFlushDisabled = NO; 
    } 
} 
- (void)webView:(WebView *)sender didFailLoadWithError:(NSError *)error forFrame:(WebFrame *)frame; 
{ 
    [self webView:sender didFinishLoadForFrame:frame]; // re-enable flushing 
} 

@end 

कभी कभी मैं अभी भी चमक देखना छोड़ देते हैं, मेरे वर्तमान सिद्धांत यह है कि इस कॉलबैक जब सभी संसाधनों लोड किए गए हैं किया जाता है लेकिन यह है कि ड्राइंग जरूरी नहीं है ख़त्म होना। यह एक दयालुता है जो हमारे पास एकमात्र कॉलबैक है।

आप 10.6 पर हैं या बेहतर आप इस हैक का उपयोग कर फ्लश घटना के अंत तक सक्षम करने में देरी करने के उनके आसपास काम कर सकते हैं, तो:

- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame; 
{ 
    [[NSOperationQueue mainQueue] addOperationWithBlock:^{ 
     if (_windowFlushDisabled) { 
      [self.libraryDocument.windowForSheet enableFlushWindow]; 
      [self.libraryDocument.windowForSheet flushWindowIfNeeded]; 
      _windowFlushDisabled = NO; 
     } 
    }]; 
} 
संबंधित मुद्दे