2015-10-07 20 views
13

Tôi đang cố gắng kết hợp Facebook Comments Plugin vào ứng dụng gốc của mình.Đăng nhập vào Facebook Comments iOS (nhanh) không trả lời

Hộp nhận xét trên Facebook được hiển thị không sao.

enter image description here

nhưng khi tôi nhấn "Đăng nhập vào Facebook để Đăng một Nhận xét", không có gì xảy ra. Tôi đang cố gắng nắm bắt sự kiện với chức năng này: func userContentController(userContentController: WKUserContentController,didReceiveScriptMessage message: WKScriptMessage) nhưng nó không hoạt động.

Đây là mã của tôi:

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

Tôi đang làm gì sai?

+0

Bạn đang sử dụng Cocoapods? –

+0

Không. Chỉ plugin - https://developers.facebook.com/docs/plugins/comments – Luda

+0

Bạn đang sử dụng facebook sdk để đăng nhập.? –

Trả lời

3

Hãy tận hưởng!

Tôi đã thay thế WKWebView bằng UIWebView và mọi thứ đã hoạt động!

Khi đăng nhập thành công refresh WebView:

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

     self.updateFramesAccordingToWebViewcontentSize() 
    } 
0

JS của bạn có bị thay đổi không? Máy phát điện mã được tạo này cho tôi:

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

Từ những gì tôi có thể nói nó có vẻ như nó là gì?

chỉnh sửa: oh, có thể không. Các phần khác của chuỗi được lấy ra khỏi ngữ cảnh.

+0

Nếu bạn có câu hỏi mới, vui lòng hỏi câu hỏi bằng cách nhấp vào nút [Hỏi câu hỏi] (http://stackoverflow.com/questions/ask). Bao gồm một liên kết đến câu hỏi này nếu nó giúp cung cấp ngữ cảnh. – Nullify

+0

@ 200OK Đoán bạn đang bối rối.Nó là một loại câu trả lời cho câu hỏi này. –

+0

có, đó là những gì tôi có trong facebookCommentsURL. Tôi không thực sự hiểu câu trả lời của bạn – Luda

0

Không có cần phải thay đổi WebViews. Vấn đề chính là kịch bản facebook đang cố gắng mở trang này trong trang mới (_blank) do đó kịch bản không hoạt động trong chế độ xem web. Để ngăn chặn vấn đề này trong WKWebView bạn cần phải thực hiện WKUIDelegate trong bộ điều khiển của mình và bạn cần phải thêm _webView.UIDelegate = self mã này vào phương thức viewDidLoad của mình.

Sau đó gọi phương thức delegate này để ngăn chặn vấn đề này:

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

trong 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 
} 
Các vấn đề liên quan