закрытие iframe внутри этого iframe, если родительский объект не находится в одном домене - PullRequest
1 голос
/ 20 декабря 2011

У меня есть приложение на холсте Facebook, которое находится в верхней панели настроек.Я добавил кнопку «Мне нравится», которая открывает IFrame, который содержит пользователей, которым понравилось приложение, с возможностью «нравится» или «отличаться от приложения».я добавил кнопку в этот iframe, который должен закрывать этот iframe при нажатии.

, поэтому внутри html iframe у меня есть:

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?

спасибо

1 Ответ

1 голос
/ 20 декабря 2011

Есть общий обходной путь, который немного хакерский и включает в себя вставку еще одного iframe внутри первого:

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

A и C могут связываться, потому что они из одного домена.

C просто содержит небольшой скрипт, который прослушивает параметры URL и вызывает методы в A.

B устанавливает атрибут src для C с соответствующими параметрами URL.

Редактировать: Это сообщение объясняет это еще лучше, с реальной диаграммой и всем прочим!

...