2015-10-07 10 views
13

私はネイティブアプリにFacebook Comments Pluginを組み込もうとしています。FacebookにログインコメントiOS(スウィフト)応答なし

Facebookのコメントボックスは問題なく表示されます。

enter image description here

が、私は「コメントを投稿するフェイスブックにログイン」を押すと、何も起こりません。私はこの機能でイベントをキャッチしようとしています: 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) 
    } 
} 

何をしているのですか?

+0

にあなたがCocoapodsを使用していますか? –

+0

いいえプラグインのみ - https://developers.facebook.com/docs/plugins/comments – Luda

+0

ログインにfacebook sdkを使用していますか? –

答えて

3

Fount it!

WKWebViewUIWebViewに変更しました。すべてが機能しました。

ログインが成功したリフレッシュのWebViewだったとき:

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

     self.updateFramesAccordingToWebViewcontentSize() 
    } 
0

あなたの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>

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

:コードジェネレータが私のためにこれを生成しましたか?

編集:oh、maybe not。文字列の他の部分はコンテキストから取り除かれます。

+0

新しい質問がある場合は、[Ask Question](http://stackoverflow.com/questions/ask)ボタンをクリックして質問してください。コンテキストを提供する場合は、この質問へのリンクを含めてください。 – Nullify

+0

@ 200OKあなたは混乱していると思います。この質問に対する答えの一種です。 –

+0

はい、それは私がfacebookCommentsURLに持っているものです。私は本当にあなたの答えを理解していない – Luda

0

webviewsを変更する必要がありませんがあります。主な問題は、Facebookのスクリプトが新しいページ(_blank)でこのページを開こうとしているため、スクリプトがwebviewで動作しないことです。 WKWebViewでこの問題を回避するには、コントローラにWKUIDelegateの実装が必要で、メソッドに_webView.UIDelegate = selfこのコードを追加する必要があります。

そして、この問題を回避するために、このデリゲートメソッドを呼び出します。

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 
} 
関連する問題