La publicación de Facebook incrustada no se muestra correctamente en UIWebView

Estoy intentando mostrar la publicación incrustada en UIWebView en UIWebView . Obtengo código de muestra del portal de desarrolladores de Facebook y lo UIWebView en UIWebView . Y mira solo la pantalla en blanco.

Luego puse este código en el file html local y lo abrí en Chrome. Todavía nada, pero veo que la inserción apareció en medio segundo y luego desapareció. Intento muchos ejemplos html embeddeds diferentes con el mismo resultado.

Aquí está mi código:

 <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 = "https://connect.facebook.net/ru_RU/sdk.js#xfbml=1&version=v2.3&appId=334367389999440"; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk'));</script> <div class="fb-post" data-href="https://www.facebook.com/FacebookDevelopers/posts/10151471074398553" data-width="500"> <div class="fb-xfbml-parse-ignore"> <blockquote cite="https://www.facebook.com/FacebookDevelopers/posts/10151471074398553"><p>Be the first to know when we release a new video by subscribing to our official Facebook Developers YouTube channel! http://www.youtube.com/facebookdevelopers</p>Posted by <a href="https://www.facebook.com/FacebookDevelopers">Facebook Developers</a> on <a href="https://www.facebook.com/FacebookDevelopers/posts/10151471074398553">29 Май 2013 г.</a> </blockquote> </div> </div> </body> </html> 

No encuentro ninguna razón para agregar script en el HTML, como dijiste que has encontrado un código de ejemplo en los documentos de FB.

El siguiente código funciona bien:

 <html> <body> <div id="fb-root"></div> <div class="fb-post" data-href="https://www.facebook.com/FacebookDevelopers/posts/10151471074398553" data-width="500"> <div class="fb-xfbml-parse-ignore"> <blockquote cite="https://www.facebook.com/FacebookDevelopers/posts/10151471074398553"><p>Be the first to know when we release a new video by subscribing to our official Facebook Developers YouTube channel! http://www.youtube.com/facebookdevelopers</p>Posted by <a href="https://www.facebook.com/FacebookDevelopers">Facebook Developers</a> on <a href="https://www.facebook.com/FacebookDevelopers/posts/10151471074398553">29 Май 2013 г.</a> </blockquote> </div> </div> </body> </html> 

La única forma de resolver el problema es crear un service proxy con Facebook-embed. Antes de insert su código HTML en UIWebView, márquelo para fb-post y fb-video:

 // Facebook Video Embed if ([HTMLcontent rangeOfString:@"fb-video"].location != NSNotFound) { [self appendFBEmbed:htmlContent type:@"video"]; } // Facebook Post Embed if ([HTMLcontent rangeOfString:@"fb-post"].location != NSNotFound) { [self appendFBEmbed:htmlContent type:@"post"]; } ... // Your some code before </body></html> [htmlContent appendString:@"</body></html>"]; [[self webView] loadHTMLString:[self HTMLcontent] baseURL:nil]; ... - (void)appendFBEmbed:(NSMutableString*)html type:(NSString* )type { NSString *locale = getYourCurrentLocaleIdentifier(); [html appendFormat:@"<script type=\"text/javascript\">"]; [html appendFormat:@"var items = document.getElementsByClassName('fb-%@');", type]; [html appendFormat:@"for (i=0; i<items.length;i++) {"]; [html appendFormat:@" var item = items[i];"]; [html appendFormat:@" var url = item.getAttribute(\"data-href\");"]; [html appendFormat:@" var src = 'http://YOUR-APP-HOST/facebook/emded.html?type=%@&url=' + encodeURIComponent(url) + '&locale=%@&width=%d';", type, locale, getYourCurrentDisplayWidth()]; [html appendFormat:@" item.innerHTML = '<iframe class=\"facebook fb-%@\" frameborder=\"0\" src=\"' + src + '\"></iframe>';", type]; [html appendFormat:@"}"]; [html appendFormat:@"</script>"]; } 

Y mi código fuente de la página remota (PHP Phalcon Controller):

 // FacebookController.php <?php class FacebookController extends \Phalcon\Mvc\Controller { public function indexAction() { $type = trim($this->request->get('type')); if (in_array($type, ['post', 'video']) === FALSE) { throw new \Exception('Unknown fb-post type'); } $url = trim($this->request->get('url')); $host = parse_url($url, \PHP_URL_HOST); if ($host === FALSE) { throw new \Exception('Invalid URL'); // URL is not URL } if ($host !== NULL /* related URL */ && $host !== 'facebook.com' && $host !== 'www.facebook.com') { throw new \Exception('Forbidden URL'); // Not a Facebook-URL } $locale = trim($this->request->get('locale')); if ($locale) { if (strlen($locale) > 10) { throw new \Exception('Invalid Locale'); // } $localesXML = new \SimpleXMLElement(ROOT_PATH . '/../data/facebook-locales.xml', NULL, TRUE); // Where ROOT_PATH . '/../data/facebook-locales.xml is a local copy of https://www.facebook.com/translations/FacebookLocales.xml $result = $localesXML->xpath('//representation[.="' . htmlentities($locale) . '"]'); if (count($result) > 0) { $locale = (string) $result[0]; } else { $locale = NULL; } } else { $locale = NULL; } if ($locale === NULL) { $locale = "en_US"; } $width = intval(trim($this->request->get('width'))); if ($width < 100 || $width > 3000) { throw new \Exception('Invalid width param'); } $viewData = [ 'type' => $type, 'url' => $url, 'width' => $width, 'locale' => $locale, ]; foreach ($viewData as $k => $v) { $this->view->setVar($k, $v); } } } 

 <!-- /views/facebook/index.phtml --> <html> <body> <div class="fb-<?= $type ?>" data-href="<?= $url ?>" data-width="<?= $width ?>"></div> <script src="https://connect.facebook.net/<?= $locale ?>/sdk.js#xfbml=1&version=v2.3"></script> </body> </html> 

Ejemplo (el text borroso es mi HTML sobre fb-embed):

introduzca la descripción de la imagen aquí

introduzca la descripción de la imagen aquí