1

我有一个作为顶部设置栏的 facebook 画布应用程序。我添加了一个点赞按钮,该按钮打开一个 IFrame,其中包含喜欢该应用程序的用户以及喜欢/不喜欢该应用程序的选项。我在该 iframe 中添加了一个按钮,该按钮应该在单击时关闭该 iframe。

所以在 iframe html 里面我有:

function closeIFrame() {
    window.parent.closeLikeIframe();
}

我创建的按钮执行此功能。

在父页面内我有以下代码:

function closeLikeIframe() {
    var iframe = document.getElementById('likeIframe');
    iframe.style.display = "none";
}

所以在 Firefox 中效果很好,但在其他浏览器中却不行。我可以出现 javascript 错误

unsafe JavaScript attempt to access frame with URL http://X from frame with URL http://Y. Domains, protocols and ports must match.
user_like.html:15Uncaught TypeError: Property 'closeLikeIframe' of object [object DOMWindow] is not a function

它没有找到 closeLikeIframe 函数,因为主页位于 facebook 上,而 IFrame 本身位于我的服务器上,所以我不允许访问。

关于如何正确打开和关闭该 IFrame 的任何想法?

谢谢

4

1 回答 1

1

有一个通用的解决方法,有点 hacky,涉及在第一个 iframe 中放置另一个 iframe:

+------------------------------------------------+
| A: Main page on FB                             |
|                                                |
|    +---------------------------------------+   |
|    | B: Iframe (page on your server)       |   |
|    |                                       |   |
|    |    +--------------------------------+ |   |
|    |    | C: Another iframe, page on FB  | |   |
|    |    |                                | |   |
|    |    +--------------------------------+ |   |
|    +---------------------------------------+   |
+------------------------------------------------+

A 和 C 可以通信,因为它们来自同一个域。

C 只包含一个小脚本,它监听 URL 参数并调用 A 中的方法。

B 使用适当的 URL 参数设置 C 的 src 属性。

编辑:这篇文章用真实的图表和一切更好地解释了它!

于 2011-12-20T15:05:05.790 回答