这是我的第一个问题问,所以如果我遗漏细节请稍微宽松一点。谢谢!
我在我的网站上使用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>
。相反,我得到了一堆错误:
(在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';
我认为这与跨域请求有关,但似乎对于其他人来说,他们只是得到了错误,但弹出窗口仍然正确加载。 任何想法如何让这个工作?
答案 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。即使这可能没有帮助,也需要在实际站点上进行点击,当我部署它时工作正常。
任何人都知道如何解决这个问题,以便在本地开发时更轻松?