我有一个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的任何想法?
感谢
答案 0 :(得分:1)
有一个通用的解决方法,有点hacky,并涉及将另一个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属性。
编辑:This post使用真实的图表和所有内容解释得更好!