Войдите в Facebook Комментарии iOS (swift) не отвечает

Я пытаюсь включить Facebook Комментарии плагин в моем родном приложении.

Коробка комментариев Facebook представлена ​​в порядке.

введите описание изображения здесь

но когда я нажимаю «Войти в Facebook, чтобы опубликовать комментарий», ничего не происходит. Я пытаюсь поймать событие с помощью этой функции: func userContentController(userContentController: WKUserContentController,didReceiveScriptMessage message: WKScriptMessage) но он не работает.

Вот мой код:

 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) } } 

Что я делаю не так?

Освободите его!

Я заменил WKWebView на UIWebView и все сработало!

Когда логин был успешно обновлен webView:

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

Является ли ваш JS искаженным? Генератор кода сгенерировал это для меня:

 <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> 

Нет необходимости изменять веб-просмотры. Основная проблема заключается в том, что скрипт facebook пытается открыть эту страницу на новой странице (_blank), поэтому скрипт не работает в webview. Чтобы предотвратить эту проблему в WKWebView вам необходимо внедрить WKUIDelegate в ваш контроллер, и вам нужно добавить _webView.UIDelegate = self этот код в свой метод viewDidLoad .

Затем вызовите этот метод делегата, чтобы предотвратить эту проблему:

в 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; } 

в 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 } 
  • Ошибка Ajax с HTTP-статусом 0 при использовании плагина Cordova WKWebView на iOS
  • Как изменить цвет выделения текста в WKWebView?
  • Можно ли использовать indexedDB в приложении IOS кордовы?
  • Захват аудио WKWebView для измерения
  • WKWebView / UIWebView получить значок сайта
  • iOS WKWebView JavaScriptCore WTFCrash
  • Предполагаемый прогресс WKWebView
  • Получение всех файлов cookie из WKWebView
  • как добавить тайм-аут для WKWebview
  • Отдельное хранилище файлов cookie для двоих (UIWebView или WKWebView)
  • Загрузка WKWebView при загрузке
  • Давайте будем гением компьютера.