如何关闭用FB.ui()打开的facebook SDK对话框?

Nic*_*ick 8 javascript facebook facebook-javascript-sdk

我正在成功显示邀请朋友对话框(代码如下所示).当用户点击跳过时,iframe /对话框会显示新页面.但是从这一点来说,我找不到如何关闭iframe /对话框的方法.FB.ui不返回任何对象,似乎没有Javascript SDK方法,并且使用DOM遍历和操作将对任何FB代码更改都很脆弱.

有任何想法吗?

function popupInviteForm(actionUrl) {
    var fbmlString = '<fb:fbml>' +
              '   <fb:request-form type="POST" content="Play against me in game?" action="' + actionUrl + '" method="post" >' +
              '       <fb:multi-friend-selector target="_self" exclude_ids="" max="20" cols="4" rows="3" showborder="false" actiontext="Invite friends!" />' +
              '   </fb:request-form>' +
              '</fb:fbml>';

    FB.ui({
        method: 'fbml.dialog',
        fbml: fbmlString,
        display: 'dialog',
        size: {width:640,height:480}, width:640, height:480
    });

    $(".FB_UI_Dialog").css('width', $(window).width()*0.8);
}
Run Code Online (Sandbox Code Playgroud)

(注意:我在Facebook论坛上发布了相同的问题而没有回复.我会更新两者,如果有答案的话.)

Javascript代码是从堆栈溢出答案改编而来的.

Igo*_*kov 5

我遇到同样的麻烦.第二天寻找解决方案.而刚刚找到一个办法:关闭活跃FB对话框,您应该在父窗口中执行代码被跟随哪里FB JS可何FB.ui被称为:

FB.Dialog.remove(FB.Dialog._active);
Run Code Online (Sandbox Code Playgroud)

因此,如果您希望邀请对话框自动关闭并且不重定向到任何其他页面,请使用以下步骤:

1)设置目标attr为和"_self":

TARGET = "_自我"

2)例如,在您的网站上创建一些回调网址/页面 https://mysite/close_dialog.html

3)将动作attr设置为刚创建的url:

行动= "HTTP://mysite/close_dialog.html"

4)在你的close_dialog.html put中跟着JS:

    <script type="text/javascript">
        if (document.location.protocol == 'https:') {
            document.location = 'http://mysite/close_dialog.html';
        } else {
            top.window.FB.Dialog.remove(top.window.FB.Dialog._active);
        };
    </script>
Run Code Online (Sandbox Code Playgroud)

更新:

5)以这种方式还有一个问题:FB iframe由https加载,但如果请求表单'action'attr使用'http' - 用户将收到浏览器警告.但是,如果请求表单'action'具有'https' - iframe js无法访问由'http'加载的父级.所以,它之所以你应该使用'https'的行动

希望这可以帮助

如果您有更好的解决方案或者您可以改进这种方式 - 请让所有人知道这一点,感谢您的任何意见

  • 我收到消息"方法FB.Dialog.remove没有得到Facebook的官方支持,很快就会删除它." 在我使用FB.Dialog.remove时在控制台上.所以不建议使用它. (2认同)