2012-04-18 6 views
3

要約:のUIWebView内の埋め込みHTMLでの焼成を停止しました(と私はしばらくの間はコードを変更しませんでした)どのようなアイデアを私はそれを戻すことができますか?は、UIWebViewのfb:likeのように、edge.create/removeイベントの焼き付きを伴う


FacebookのようなボタンでUIWebViewを持つiOSアプリケーションがあります。 enter image description here

このダイアログが表示される前にFacebookにログインすると、ログインロジックが発生しません。

私は/ unlikeのようにクリックすることができますが、うまくいきますが、それはダイアログを閉じるために使用されました。数日前にこれが壊れました。ダイアログを閉じるには、edge.create/edge.removeイベントを購読してください。ここで

は私のHTMLページです:

<html> 
    <head> 
     <style type='text/css'> 
      * { -webkit-touch-callout: none; -webkit-user-select: none; } 
      body { margin:0px; } 
      .fb_edge_comment_widget { display: none !important; } 
     </style> 
    </head> 
    <body>     
     <div id='fb-root'></div> 
     <script src='http://connect.facebook.net/en_US/all.js#xfbml=1'></script> 
     <script> 
      function forwardEvent(name) { 
       var iframe = document.createElement('iframe'); 
       iframe.setAttribute('src', 'event:' + name); 
       document.documentElement.appendChild(iframe); 
       iframe.parentNode.removeChild(iframe); 
      }; 
      function beginForwardingEvent(name) { 
       FB.Event.subscribe(name, function(r) { forwardEvent(name); }); 
      }; 
      function beginForwardingEvents(names) { 
       for (var i = 0; i < names.length; i++) { 
        beginForwardingEvent(names[i]); 
       } 
      }; 
      beginForwardingEvents(['edge.create', 'edge.remove', 'xfbml.render']); 
     </script>  
     <fb:like href='%@' 
        send='false' 
        layout='%@' 
        width='%.0f' 
        show_faces='%@' 
        action='%@' 
        colorscheme='%@' 
        font='%@' 
        ></fb:like> 
    </body> 
</html> 

、ここでは、私はObjective-Cのコードでのイベントキャプチャ方法です:ので、もう一度

- (void)didObserveFacebookEvent:(NSString *)fbEvent { 
    if ([fbEvent isEqualToString:@"edge.create"] && [_delegate respondsToSelector:@selector(facebookLikeViewDidLike:)]) 
     [_delegate facebookLikeViewDidLike:self]; 
    else if ([fbEvent isEqualToString:@"edge.remove"] && [_delegate respondsToSelector:@selector(facebookLikeViewDidUnlike:)]) 
     [_delegate facebookLikeViewDidUnlike:self]; 
    else if ([fbEvent isEqualToString:@"xfbml.render"] && [_delegate respondsToSelector:@selector(facebookLikeViewDidRender:)]) 
     [_delegate facebookLikeViewDidRender:self]; 
} 


- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { 
    // Allow loading Like button XFBML from file 
    if ([request.URL.scheme isEqualToString:@"file"]) 
     return YES; 

    // Allow loading about:blank, etc. 
    if ([request.URL.scheme isEqualToString:@"about"]) 
     return YES; 

    // Block loading of 'event:*', our scheme for forwarding Facebook JS SDK events to native code 
    else if ([request.URL.scheme isEqualToString:@"event"]) { 
     [self didObserveFacebookEvent:request.URL.resourceSpecifier]; 
     return NO; 
    } 
    .... 
} 

を - edge.createは、発射停止(と私がやりましたコード内で何も変更しないでください) - どのように私はそれを取り戻すことができますか?

ありがとうございます。

UPDATE: FB bug reportedがあるが、私はまだそれがFBRELLサイト上で動作しない理由を理解したいと思いますが、iOS版のUIWebView内では機能しません。 iOSのダイアログに微調整が必​​要な場合がありますか?このための回避策はありますか?答えを得ることを望む恩恵を始めました。

答えて

1

edge.createイベントは、ローカルHTMLファイル内で発生しないようです。これは偶然やデザインによってであるかどうか、私にはわからないんだけど、私はいくつかのことをやったし、これが動作するようになった:

  1. は自分のサーバー上の「FacebookLikeView.html」ファイルをホスティング、フォーマットを代入します私が望む実際の値の指定子。 action='%@'が明示的にaction='like'になりました。

  2. はFacebookLikeView.mでload方法からすべてを削除し、行に置き換え:

    if ([request.URL.host hasSuffix:@"yourhost.com"]) 
        return YES; 
    

    if ([request.URL.scheme isEqualToString:@"file"]) 
        return YES; 
    

    [_webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.yourhost.com/FacebookLikeView.html"]]]; 
    
  3. webView:shouldStartLoadWithRequest:navigationType方法で行を変更しました

これはあなたが望んでいた答えではありませんが、これはあなたにいくつかの手がかりを与えてくれることを願っています。

+0

はい!それはそれでした - 遅い返事には申し訳ありません。これらのイベントは、リモートHTMLファイルでのみ発生します。 – avs099

+0

ありがとうございます。これも私のために働いた! – peterept

関連する問題