puedo porque funciona error codigo cierra celular carga abrir ios swift facebook-graph-api facebook-comments wkwebview

ios - porque - no puedo abrir facebook en mi iphone



Iniciar sesiĆ³n en Facebook Comentarios iOS(swift) no responde (3)

Estoy tratando de incorporar Facebook Comments Plugin en mi aplicación nativa.

El cuadro de comentarios de Facebook se presenta bien.

pero cuando presiono "Iniciar sesión en Facebook para publicar un comentario", no ocurre nada. Estoy tratando de ver el evento con esta función: func userContentController(userContentController: WKUserContentController,didReceiveScriptMessage message: WKScriptMessage) pero no está funcionando.

Aquí está mi código:

import UIKit import WebKit class FacebookCommentsViewController: UIViewController, WKScriptMessageHandler{ var webView: WKWebView! override func viewDidLoad() { super.viewDidLoad() // WKWebView let contentController = WKUserContentController(); contentController.addScriptMessageHandler(self,name: "callbackHandler") let configuration = WKWebViewConfiguration() configuration.userContentController = contentController webView = WKWebView(frame: CGRectMake(0, 0, self.view.frame.width, self.view.frame.height), configuration: configuration) webView.scrollView.bounces = false self.view.addSubview(webView) let facebookCommentsURL = "<!DOCTYPE html><html> <head> <meta name=/"viewport/" content=/"width=device-width, initial-scale=1.0/"> </head> <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=/"http://connect.facebook.net/en_US/all.js#xfbml=1&appId=527957123932456&status=0/"; fjs.parentNode.insertBefore(js, fjs);}(document, ''script'', ''facebook-jssdk''));</script> <div class=/"fb-comments/" data-href=/url-to-my-item data-width=/"470/" data-num-posts=/"5/"></div></body></html>" webView.loadHTMLString(facebookCommentsURL, baseURL: NSURL(string:"my base url")) } func userContentController(userContentController: WKUserContentController,didReceiveScriptMessage message: WKScriptMessage) { print(message.name) } }

¿Qué estoy haciendo mal?


¿Tu JS está mal formado? El generador de código generó esto para mí:

<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/sdk.js#xfbml=1&version=v2.5"; fjs.parentNode.insertBefore(js, fjs); }(document, ''script'', ''facebook-jssdk'')); </script>

<!DOCTYPE html> <html> <head> <meta name=/ "viewport/" content=/ "width=device-width, initial-scale=1.0/"> </head> <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 = /"http://connect.facebook.net/en_US/all.js#xfbml=1&appId=527957123932456&status=0/"; fjs.parentNode.insertBefore(js, fjs);}(document, ''script'', ''facebook-jssdk'')); </script> <div class=/ "fb-comments/" data-href=/url-to-my-item data-width=/ "470/" data-num-posts=/ "5/"></div> </body> </html>

Por lo que puedo decir, parece que es?

editar: oh, tal vez no. Las otras partes de la cuerda se toman fuera de contexto.


¡Fount it!

¡He reemplazado WKWebView con UIWebView y todo funcionó!

Cuando el inicio de sesión fue exitoso, actualice webView:

func webViewDidFinishLoad(webView: UIWebView) { let currentURL : NSString = (webView.request?.URL!.absoluteString)! if (currentURL.containsString("/login_success")) { self.reloadFacebookComments() } self.updateFramesAccordingToWebViewcontentSize() }


No es necesario cambiar las vistas web. El principal problema es que el script de Facebook está intentando abrir esta página en la página nueva (_blank), por lo tanto, el script no funciona en la vista web. Para evitar este problema en WKWebView necesita tener la implementación de WKUIDelegate en su controlador y debe agregar _webView.UIDelegate = self este código en su método viewDidLoad .

A continuación, llame a este método delegado para evitar este problema:

en el Objective C

- (WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures { if (!navigationAction.targetFrame.isMainFrame) { [webView loadRequest:navigationAction.request]; } return nil; }

en Swift

optional func webView(_ webView: WKWebView, createWebViewWithConfiguration configuration: WKWebViewConfiguration, forNavigationAction navigationAction: WKNavigationAction, windowFeatures windowFeatures: WKWindowFeatures) -> WKWebView?{ if navigationAction.targetFrame.isMainFrame == nil { webView.loadRequest(navigationAction.request) } return nil }