Facebook喜欢按钮https问题:来自http和https的协议不匹配

时间:2013-06-18 08:38:33

标签: facebook facebook-like

我正在运行与此错误非常类似的错误:Facebook Login API HTTPS Issue

我有一个网站使用facebook认证,Facebook登录没问题。但点击时,Facebook喜欢按钮会遇到麻烦(Chrome,Safari,Firefox,OSX测试失败),错误信息是:

Blocked a frame with origin "https://www.facebook.com" from accessing a 
frame with origin "http://static.ak.facebook.com".  The frame requesting 
access has a protocol of "https", the frame being accessed has a protocol
of "http". Protocols must match.

我已经搜遍了所有搜索结果。

当点击“赞”按钮时,它似乎从https://facebook.com回调中弹出一帧,并尝试请求http://static.ak.facebook.com从而导致协议不匹配?!

以下是我在<body>代码

之后的内容
<div id="fb-root"></div>
<script>
  window.fbAsyncInit = function() {
    // init the FB JS SDK
    FB.init({
      appId      : 'appid',                        // App ID from the app dashboard
      channelUrl : '//mydomain/channel.html',        // Channel file for x-domain comms
      status     : true,                                 // Check Facebook Login status
      xfbml      : true                                  // Look for social plugins on the page
    });

    // Additional initialization code such as adding Event Listeners goes here
  };

  // Load the SDK asynchronously
  (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/zh_TW/all.js";
     fjs.parentNode.insertBefore(js, fjs);
   }(document, 'script', 'facebook-jssdk'));
</script>

http://mydomain/channel

处的频道文件
<script src="//connect.facebook.net/zh_TW/all.js"></script>

这就是我如何使用like-button

<div class="fb-like" data-href=url data-send="true" data-width="450"
data-show-faces="true"></div>

请真的需要帮助!

2 个答案:

答案 0 :(得分:4)

在您的第一个脚本标记中,您可以明确告诉Facebook使用HTTPS ...

添加以下行:

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

在FB.init函数调用之前添加它,就在注释的下方或代替注释:

// init the FB JS SDK

这将确保Facebook的服务器通过https加载任何所需的库。

希望这有帮助。

答案 1 :(得分:0)

在Facebook上查看js代码时,有多个网址包含

的硬编码字符串
http://static .../rsrc.php 

这些可能是触发错误的文件。

这可能是Facebook需要更新的内容。

另外,可以从Facebook下载该js文件并将其存储在您的服务器上并删除硬编码的http字符串。我会进一步测试,但此刻我正在打电话。