FB._https = true与FB.Canvas.setAutosize不一致?

时间:2011-09-22 15:49:14

标签: javascript facebook

我正在将我的脸书应用转换为通过HTTPS运行。

似乎当我将FB._https变量设置为true时,FB.Canvas.setAutoResize()会停止调整iframe的大小。

这就是我的代码:

    window.fbAsyncInit = function() {

    FB._https = true; // troublemaker
    FB.init({
        appId: facebookAppId,
        status: true,
        cookie: true,
        session: facebookSession,
        xfbml: true
    });

    // The parameter show how many milliseconds to wait between
    // resizing.
    // Apparently, 91 is Paul's favorite number.
    // http://developers.facebook.com/docs/reference/javascript/FB.Canvas.setAutoResize/
    FB.Canvas.setAutoResize(91);

};

有什么想法吗?

3 个答案:

答案 0 :(得分:4)

如果您设置FB._https = true;并通过http访问该页面,则表示您遇到了问题。

我建议每Facebook JavaScript SDK over HTTPS loading non-secure items

使用FB._https = (window.location.protocol == "https:");

答案 1 :(得分:2)

  1. 删除指定FB._https的行。你不应该设置这个值。 JS SDK在加载时自行完成。自己设置是一个黑客 - 名称中的下划线应该表明该值不适用于外部修改。

  2. 您应该使用跨域通信渠道网址。有关此信息的信息记录在JavaScript SDK页面上。使用频道URL时,请确保不要指定“http:”或“https:”等协议。频道网址应以“//”开头,否则应根据document.location.protocol手动构建。

  3. 确保在应用程序的设置中正确设置了“站点URL”和“站点域”。这对于各种JS SDK功能至关重要。

答案 2 :(得分:0)

我遇到了同样的问题。这似乎取决于我放置连接脚本的位置。这是使SSL工作的代码。您必须删除连接脚本并使用channelUrl。

<!-- COMMENT OUT <script src="https://connect.facebook.net/en_US/all.js"></script>-->

<script type="text/javascript" charset="utf-8">
FB._https = (window.location.protocol == "https:"); 
window.fbAsyncInit = function() {
FB.init({
  appId      : 'xxxxxxxxxxxxx', // App ID
  channelUrl : '<?php echo bloginfo('url');?>/channel.html', // Channel File
  status     : true, // check login status
  cookie     : true, // enable cookies to allow the server to access the session
  oauth      : true, // enable OAuth 2.0
  xfbml      : true  // parse XFBML
});
FB.Canvas.setAutoGrow();
}
// Load the SDK Asynchronously
  (function(d){
     var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
     if (d.getElementById(id)) {return;}
     js = d.createElement('script'); js.id = id; js.async = true;
     js.src = "//connect.facebook.net/en_US/all.js";
     ref.parentNode.insertBefore(js, ref);
   }(document));                  
   //FB.Canvas.setAutoGrow();
    /*FB.Event.subscribe('edge.create', 
    function(response){ 
    top.location.href = ''; 
    }*/

这是让ifame重新调整大小但是会破坏ssl的代码。将连接脚本添加回顶部并删除channelUrl。实际上你不必删除channelUrl就可以了。

<script src="https://connect.facebook.net/en_US/all.js"></script>
<script type="text/javascript" charset="utf-8">
FB._https = (window.location.protocol == "https:"); 
window.fbAsyncInit = function() {
FB.init({
  appId      : 'xxxxxxxxxxxxxxx', // App ID
  //channelUrl : '<?php echo bloginfo('url');?>/channel.html', // Channel File
  status     : true, // check login status
  cookie     : true, // enable cookies to allow the server to access the session
  oauth      : true, // enable OAuth 2.0
  xfbml      : true  // parse XFBML
});
FB.Canvas.setAutoGrow();
}
// Load the SDK Asynchronously
  (function(d){
     var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
     if (d.getElementById(id)) {return;}
     js = d.createElement('script'); js.id = id; js.async = true;
     js.src = "//connect.facebook.net/en_US/all.js";
     ref.parentNode.insertBefore(js, ref);
   }(document));                  
   //FB.Canvas.setAutoGrow();
    /*FB.Event.subscribe('edge.create', 
    function(response){ 
    top.location.href = ''; 
    }*/

我不明白。

菲尔