9

我正在运行一个与此非常相似的错误: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.

我已经搜索了所有内容,但没有找到解决方案。

似乎当单击like-button时,它会从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>

这就是我如何使用赞按钮

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

真的需要帮助,拜托!

4

2 回答 2

4

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

添加行:

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

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

// init the FB JS SDK

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

希望这可以帮助。

于 2013-10-23T15:13:40.420 回答
0

查看 Facebook 上的 js 代码,有多个 url 包含硬编码字符串

http://static .../rsrc.php 

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

这可能是 Facebook 需要更新的东西。

附带说明一下,可以从 Facebook 下载该 js 文件并将其存储在您的服务器上,然后删除硬编码的 http 字符串。我会进一步测试这个,但我现在在我的手机上。

于 2013-10-17T19:17:37.893 回答