2012-04-18 15 views
6

रीलोडिंग रखता है हाल ही में मैं एक वेबपृष्ठ पर टिप्पणी करने के लिए आईओएस में एक कस्टम UIWebView में फेसबुक सोशल प्लगइन्स को एकीकृत करने की कोशिश कर रहा हूं। मैंने पसंद बटन के साथ ही टिप्पणियाँ प्लगइन जोड़ा है। यहाँ एचटीएमएल कोड मैं वेब दृश्य में लोड है:आईओएस: फेसबुक टिप्पणियां प्लगइन मोबाइल

<html> 
    <body> 
<div id="fb-root"></div> 
<script>(function(d, s, id) { 
var js, fjs = d.getElementsByTagName(s)[0]; 
if (d.getElementById(id)) return; 
js = d.createElement(s); js.id = id; 
js.src = "//connect.facebook.net/en_US/all.js#xfbml=1"; 
fjs.parentNode.insertBefore(js, fjs); 
}(document, 'script', 'facebook-jssdk'));</script> 
<div class="fb-like" data-href="http://www.heretheweb.com" data-send="false" data-layout="button_count" data-width="240" data-show-faces="false"></div> 
<div class="fb-comments" data-href="http://www.heretheweb.com" data-num-posts="5" data-width="470"></div> 
<body> 
</html> 

सोमवार को पहले कार्यान्वयन 4 प्लेटफार्मों में सफल हो गया था, दोनों सिमुलेटर (आईओएस 4 और iOS 5), iPhone 3G iOS4 और iPhone 4 आईओएस 5. मंगलवार को, मैंने इसे विकसित करना जारी रखा और मैंने अपने कस्टम UIWebView के साथ काम किया, जिसमें पहले तीन में कोई समस्या नहीं थी। लेकिन आईफोन 4 (आईओएस 5) पर वेब व्यू एक ही वेब पेज को फिर से लोड करना जारी रखता है, जिसके परिणामस्वरूप टिप्पणी बॉक्स कभी दिखाई नहीं देता है।

https://m.facebook.com/plugins/comments.php?channel_url=http%3A%2F%2Fstatic.ak.facebook.com%2Fconnect%2Fxd_arbiter.php%3Fversion%3D4%23cb%3Df28c738848%26origin%3Dhttp%253A%252F%252Fwww.heretheweb.com%252Ff3fdf142e8%26domain%3Dwww.heretheweb.com%26relation%3Dparent.parent&href=http%3A%2F%2Fwww.heretheweb.com&locale=en_US&mobile=true&numposts=5&sdk=joey&width=470

मैं मैं गलत क्या कर रहा हूँ वास्तव में, मैं साफ कर UIWebView प्रतिनिधि तरीकों पता नहीं है, मैं breakpoints सभी तरीकों मैं रद्द कर सकते थे के साथ जांच की है: यह URL ऐसा है। कुछ भी नहीं ... वेबपृष्ठ शुरुआत में लोड हो जाता है, और फिर यह उपर्युक्त यूआरएल लोड करने की कोशिश करता है ...

उत्तर

1

ठीक है ... हल हो गया। कुछ अजीब और अजीब कारणों के लिए, कभी-कभी आईफोन 4 (सिम्युलेटर, आईफोन 3 जी या आईपैड 2 नहीं) में टिप्पणियां वेब पार्ट लोड करते समय यह एक बार फिर से लोड करने का प्रयास करता है (कैश-कंट्रोल हेडर अधिकतम आयु = 0, इसलिए यह रीलोड को मजबूर करता रहता है)

समाधान UIWebViewNavigationType की जांच करना था, यदि यह UIWebViewNavigationTypeReload के बराबर है, तो चाहिएस्टार्ट लोड WithRequest: वापस नहीं देता है।

यह वास्तव में मुश्किल ¬¬

+0

अजीब, मुझे – peetonn

+0

मुझे न तो के लिए काम नहीं करता। मैं बस 3 नीले रंग के पल्सिंग सलाखों के साथ एक खाली पृष्ठ मिलता है। प्रारंभिक टिप्पणियां प्लगइन कॉल सफल नहीं लगती है। – ilyashev

+0

मुझे आश्चर्य है कि अगर किसी को एफबी के दृष्टिकोण से किसी भी तरह से वैधता की आवश्यकता है, यानी जब आप फोन पर टिप्पणियां प्लगइन लोड करते हैं, तो आपके द्वारा प्रदान किए गए href को कुछ सबूत देना पड़ता है कि यह आपके लिए "संबंधित" है – ilyashev

0

मैं सफारी/iOS मोबाइल के तहत यह एक ही समस्या है, Sencha स्पर्श 1, पर विकसित एक वेब अनुप्रयोग पर यह दूसरों ब्राउज़रों के तहत काम करते हैं और इतना था, लेकिन इस पर, इसे रखने के लोड हो रहा है और लोड हो रहा है। मुझे सुराग नहीं मिल रहा है।

5

फेसबुक टिप्पणियों प्लगइन में एक बग है जो असीमित लोडिंग लूप का कारण बनता है जब टिप्पणियां प्लगइन रेटिना सक्षम डिवाइस पर लोड की जा रही हैं।

अमेरिकन प्लान जे एस लिपियों में से एक में एक पंक्ति इस प्रकार है कि नहीं है:

if(window.devicePixelRatio>1)document.location.reload()

इसलिए यदि आप एक उच्च घनत्व स्क्रीन आपको बर्बाद कर रहे हैं के साथ एक डिवाइस पर पेज तक पहुँच रहे हैं।

मैं इस मुद्दे here

सूचना दी मैं इसे ठीक लेकिन लगता है कि दो बार उपयोग करने से पहले, यह किसी भी समय काम करना बंद कर सकता है एक गंदा हैक के साथ आया था।

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

मेरा विचार फ्लाई पर जेएस कोड को ठीक करना था क्योंकि इसे UIWebView द्वारा लोड किया जा रहा है।

<FBCommentsFixingURLProtocol.h> 

#import <Foundation/Foundation.h> 

@interface FBCommentsFixingURLProtocol : NSURLProtocol 

@end 

<FBCommentsFixingURLProtocol.m> 
#import "FBCommentsFixingURLProtocol.h" 


static NSString *FBCommentsFixingHeader = @"X-FBFix"; 

@interface FBCommentsFixingURLProtocol() 
@property (nonatomic, readwrite, strong) NSURLRequest *request; 
@property (nonatomic, readwrite, strong) NSURLConnection *connection; 
@property (nonatomic, readwrite, strong) NSURLResponse *response; 

@end 

@implementation FBCommentsFixingURLProtocol 
@synthesize request = request_; 
@synthesize connection = connection_; 
@synthesize response = response_; 


+ (BOOL)canInitWithRequest:(NSURLRequest *)request 
{ 
    if (([request.URL.scheme isEqualToString:@"https"] || [request.URL.scheme  isEqualToString:@"http"]) && [request.URL.absoluteString rangeOfString:@"facebook.com/plugins/comments.php"].location != NSNotFound && 
    [request valueForHTTPHeaderField:FBCommentsFixingHeader] == nil) 
{ 
    return YES; 
} 
return NO; 
} 

+ (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request 
{ 
    return request; 
} 

- (id)initWithRequest:(NSURLRequest *)request 
     cachedResponse:(NSCachedURLResponse *)cachedResponse 
      client:(id <NSURLProtocolClient>)client 
{ 
    // Modify request so we don't loop 
    NSMutableURLRequest *myRequest = [request mutableCopy]; 
    [myRequest setValue:@"" forHTTPHeaderField:FBCommentsFixingHeader]; 
    self = [super initWithRequest:myRequest 
       cachedResponse:cachedResponse 
         client:client]; 
    if (self) 
    { 
     [self setRequest:myRequest]; 
    } 
    return self; 
} 


- (void)startLoading 
{ 
    NSURLConnection *connection = [NSURLConnection connectionWithRequest:[self request] 
                  delegate:self]; 
    [self setConnection:connection]; 

} 

- (void)stopLoading 
{ 
    [[self connection] cancel]; 
} 


- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{ 
    NSString *dataAsString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 
    //Just modify the script to prevent it from execution on Retina devices. 
    //window.devicePixelRatio = 2 for the Retina Display 
    NSString* modified = [dataAsString stringByReplacingOccurrencesOfString:@"if(window.devicePixelRatio>1)document.location.reload();" withString:@""]; 
    NSData* dataMod=[modified dataUsingEncoding:NSUTF8StringEncoding]; 
    [[self client] URLProtocol:self didLoadData:dataMod]; 
} 

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 
{ 
    [[self client] URLProtocol:self didFailWithError:error]; 
    [self setConnection:nil]; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{ 
    [self setResponse:response]; 
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    [[self client] URLProtocolDidFinishLoading:self]; 
    [self setConnection:nil]; 
} 


@end 

और फिर मैं यह एप्लिकेशन प्रतिनिधि didFinishLaunchingWithOptions में पंजीकृत:

मक्खी मैं NSURLProtocol के अपने खुद के कार्यान्वयन बनाया पर अनुरोध को संसाधित करने के लिए

[NSURLProtocol registerClass:[FBCommentsFixingURLProtocol class]]; 

मुझे पता है कि यह है हूँ एक गंदे हैक लेकिन अभी भी यह काम करता है।

+0

वाह !! आश्चर्यजनक मेरे दोस्त ओ_ओ !! – Lupi

0

कोड नीचे मेरे लिए ठीक काम कर रहा है

UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 300, 400)]; 
NSString *html = @"<div id=\"fb-root\"></div><script>(function(d, s, id) {var js, fjs = d.getElementsByTagName(s)[0];if (d.getElementById(id)) return;js = d.createElement(s); js.id = id;js.src = \"https://connect.facebook.net/en_GB/sdk.js#xfbml=1&version=v2.5\";fjs.parentNode.insertBefore(js, fjs);}(document, 'script', 'facebook-jssdk'));</script><div class=\"fb-comments\" data-href=\"URL_OF_YOUR_PAGE\" data-numposts=\"5\"></div>"; 
    [webView loadHTMLString:html baseURL:[NSURL URLWithString:@"https://facebook.com"]]; 
    [self.view addSubview:webView]; 
संबंधित मुद्दे