【发布时间】:2011-12-19 19:42:09
【问题描述】:
这是我提出的第一个问题,所以如果我遗漏了细节,请宽容一点。谢谢!
我在我的网站上使用 Facebook Like Button 插件(尝试了 HTML5 版本和 xfbml 版本)。我已经包含了所有必要的标签和脚本来支持 xfbml 和 HTML5。我已遵循“规范”并在此处和其他地方对问题进行了彻底的搜索:
“点赞”按钮功能正常,只是在单击按钮后应该显示的弹出/弹出窗口没有加载。我的意思是 load,而不是 show(是的,我已经根据 spec 检查了 overflow:hidden 问题)。新的<span>(包括<iframe>)在点赞按钮<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>。相反,我得到了一堆错误:
- 有臭名昭著的Unsafe Javascript attempt to access frame with URL
- 当您在控制台/Firebug 中手动运行 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';
我认为这与跨域请求有关,但对于其他人来说,他们只是收到错误消息,但弹出窗口仍然可以正常加载。 任何想法如何让它发挥作用?
【问题讨论】:
标签: facebook plugins cross-domain facebook-like