在新的Facebook JavaScript SDK中显示弹出窗口

时间:2010-04-26 12:25:44

标签: javascript facebook fbml fbconnect

我以前在我的网站上有一个href。当用户点击它时,一个多朋友选择器显示他们可以邀请他们的朋友到我的网站。 这是使用以下代码完成的:

 FB.ensureInit(function() {
        var dialog = new FB.UI.FBMLPopupDialog('XXXXXXX', '');
        var fbml = 'Multi-Friend-Selector FBML'
        dialog.setFBMLContent(fbml);
        dialog.setContentWidth(620);
        dialog.setContentHeight(570);
        dialog.show();
    });

现在,我正在使用新的JavaScript SDK(http://connect.facebook.net/en_US/all.js),但旧的方法不存在...
如何使用新SDK进行操作?

9 个答案:

答案 0 :(得分:7)

是的,终于得到了令人恼火的盒子,从最初的964像素调整大小:

兼容性(让我们希望将来能够修复,或者更好地记录) 我还是说

size:(width:600,height:500),

然后我将宽度和高度分解为父对象的属性,所以最后使用:

size:(width:600,height:500),width:600,height:500, ...

现在它也可以使用您选择的JavaScript库进行调整,也就是说,这是jQuery调整大小的示例:

FB.ui({
    method: 'fbml.dialog',
    fbml: (
         '<div style="width:480px;border:1px black solid;">A small JavaScript library that allows you to harness ' +
         'the power of Facebook, bringing the user\'s identity, ' +
         'social graph and distribution power to your site.</div>'
       ),
    size: {width:640,height:480}, width:640, height:480
});
$(".FB_UI_Dialog").css('width', $(window).width()*0.8); // 80% of window width
// I'm also sure you could stack this call if you wanted to

答案 1 :(得分:1)

嗯,在阅读开源Facebook JavaScript SDK 2天后(因为我不是JavaScript专家:P),我发现了一种方法:

FB.ui({
            method : 'fbml.dialog',
            fbml: '<fb:fbml>' +
                  '<fb:request-form action=......',
        });

看起来很简单,是的,我知道,但现在问题是当我发送邀请时,我打开了一个新的标签,离开了“对话框”(在Facebook术语中,因为弹出对他们来说意味着另一件事!)打开!

所以我仍然在努力,但我会找到答案!

答案 2 :(得分:1)

这对我有用..

FB.ui({method:'fbml.dialog', fbml:'<fb:request-form action="URL" method="post" invite="true" type="TYPE" content="THIS IS THE MESSAGE <fb:req-choice url=\'URL\'label=\'Accept\' />" <fb:multi-friend-selector showborder="false" actiontext="REQUEST FORM TITLE" /> </fb:request-form>'})});

将CAPS替换为您的内容。

我遇到的唯一问题是我无法弄清楚如何调整对话框以适应内容。它保持在964px。我尝试了很多版本的

size:(width:600,height:500),

任何想法?

答案 3 :(得分:1)

我就是这样做的。  FB.ui({method:'fbml.dialog',宽度:500,身高:300, fbml:......

答案 4 :(得分:1)

以前的答案都不适合我。 我找到的解决方法是执行以下操作:

var uiSize = FB.UIServer.Methods["fbml.dialog"].size;
FB.UIServer.Methods["fbml.dialog"].size = {width:760, height:450};

FB.ui({
    method:'fbml.dialog',
    display: 'popup',                   
    fbml: message
},
    function( response ){
        FB.UIServer.Methods["fbml.dialog"].size = uiSize;
    }
);

答案 5 :(得分:1)

以下代码适用于我,但请注意以下内容:

  • 宽度和高度指的是对话框本身,没有“褪色”的厚蓝色边框。
  • 宽度+高度在以下代码中显示在3个位置。
  • COLS和ROWS属性与以下示例中的大小相匹配 - 625x515像素。
  • 由于IE很糟糕,我不得不使用jQuery和$ .browser在IE中强制进行POP-UP。

希望这会有所帮助:)

function fb_invite_friends() {
    FB.ui({method:'fbml.dialog', display:($.browser.msie ? 'popup' : 'dialog'), size:{width:625,height:515}, width:625, height:515, fbml:'<fb:request-form action="http://yoursite.com/" method="POST" invite="true" type="DayBox" content="Would you like to check out YOUR-SITE App too? <fb:req-choice url=\'http://apps.facebook.com/your-site/\' label=\'Yes\' />" <fb:multi-friend-selector showborder="false" actiontext="Invite your friends to use DayBox" cols=5 rows=3 bypass="cancel" email_invite="true" import_external_friends="false" /> </fb:request-form>'});
}

$(document).ready(function() {

    /* Facebook */
    window.fbAsyncInit = function() {
        FB.init({appId: fb_app_id, status: true, cookie: true, xfbml: true});
        if (facebook_canvas) {
            FB.Canvas.setAutoResize(4000); // Will resize the iFrame every 4000ms
        }
        FB.Event.subscribe('edge.create', function(response) {
            // The user clicked "LIKE", so we give him more coins!
            $.get(href_url, {action:'log_likes'});
        });
        // FBML Dialog size fix
        FB.UIServer.Methods["fbml.dialog"].size = {width:625, height:515};
    };
    (function() {
        var e = document.createElement('script'); e.async = true;
        e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
        document.getElementById('fb-root').appendChild(e);
    }());

}

答案 6 :(得分:0)

你也可以添加display:'dialog',它会正确调整大小。

答案 7 :(得分:0)

试试这个:

    <script>
  var uiSize = FB.UIServer.Methods["fbml.dialog"].size;
FB.UIServer.Methods["fbml.dialog"].size = {width:999};

  var dialog = {
    method: 'fbml.dialog',
    display: 'dialog',
    fbml: '<fb:request-form action="http://apps.facebook.com/xxxxx" method="post" target="_top" invite="true" type="Contest" content="Come and Join this contest!"> <fb:multi-friend-selector showborder="false" max="30" import_external_friends="false" email_invite="false" cols="5" actiontext="Invite your friends!" /></fb:request-form>',
  };
  FB.ui(dialog,function(response) {
        alert("fbDialogDismiss();");
    });
</script>

答案 8 :(得分:0)

如果有人需要帮助处理申请请求和朋友邀请,请访问facebook文档:http://developers.facebook.com/docs/reference/dialogs/requests/ 你需要的代码是:

FB.ui({method: 'apprequests', message: 'A request especially for one person.', data: 'tracking information for the user'});