Facebook Like Button Popup无法加载

时间:2011-11-01 20:22:37

标签: facebook plugins cross-domain facebook-like

这是我的第一个问题,所以如果我遗漏细节请稍微宽松一点。谢谢!

我在我的网站上使用Facebook Like Button插件(尝试了HTML5版本和xfbml版本)。我已经为xfbml和HTML5支持包含了所有必需的标记和脚本。我遵循了“规范”,并在此处和其他地方进行了彻底的搜索:

like按钮功能正常,但单击按钮后应显示的弹出/弹出窗口无法加载。我的意思是加载,而不是显示(是的,我已根据spec检查了overflow:hidden个问题。新的<span>(包括<iframe>)会在like按钮<span>之后立即添加到DOM中,并且它们会加载应该存在的所有代码:

<span class=" fb_edge_comment_widget fb_iframe_widget " style="top: 19px; left: 0px; z-index: 10000;">
  <span>
    <iframe id="fa02aa64d8da" class="fb_ltr" scrolling="no" name="fee6eb9f6f2768" style="border: medium none; overflow: hidden; height: 225px; width: 401px;" src="http://www.facebook.com/plugins/comment_widget_shell.php?api_key=233493930007947&locale=en_US&master_frame_name=fa12240bc73214&sdk=joey">
      <html>
        <head>
        <body onload="onPageLoad()">
          <script>
            var onPageLoad = function() {
              document.domain = 'facebook.com';
              var loc = window.location.toString();
              var index = loc.indexOf('?');
              var qs = loc.substring(index + 1);
              var params = qs.split('&');
              var master_frame_name = '';
              for (var i in params) {
                var components = params[i].split('=');
                if (components[0] == 'master_frame_name') {
                  master_frame_name = components[1];
                  break;
                }
              }
              try {
                var master_frame = parent.frames[master_frame_name];
                master_frame.ExternalNodeConnectWidget.onCommentWidgetLoaded(document);
              } catch (e) {}
            };
          </script>
        </body>
      </html>
    </iframe>
  </span>
</span>

在加载<span>之后,它应该激活脚本函数onPageLoad,该函数应该加载所有数据到<iframe>。相反,我得到了一堆错误:

  1. 臭名昭着的Unsafe Javascript attempt to access frame with URL
  2. 当您在控制台/ Firebug中手动运行onPageLoad()函数(希望将内容加载到iframe中)时,您将获得
  3. (在Chrome 15中)

        Error: SECURITY_ERR: DOM Exception 18
          code: 18
          message: "SECURITY_ERR: DOM Exception 18"
          name: "SECURITY_ERR"
          __proto__: DOMException
    

    (在Firefox 7中)

        Error: Illegal document.domain value
        document.domain = 'facebook.com';
    

    我认为这与跨域请求有关,但似乎对于其他人来说,他们只是得到了错误,但弹出窗口仍然正确加载。 任何想法如何让这个工作?

2 个答案:

答案 0 :(得分:2)

这是一个已知的Facebook错误:http://developers.facebook.com/bugs/293075054049400

基本上,如果在Facebook用户的帐户上启用安全浏览,就会出现此行为。

答案 1 :(得分:0)

如果您禁用安全浏览(因为它是默认设置),这是另一种可能的解决方案: 您不能在og:url中使用localhost,因为Facebook无法浏览该页面以获取数据。因此,在开发时,请在og:url,og:image,like / share button url等中输入实时站点URL。即使这可能没有帮助,也需要在实际站点上进行点击,当我部署它时工作正常。

任何人都知道如何解决这个问题,以便在本地开发时更轻松?