Подтвердить что ты не робот

Как закрыть iframe внутри самого iframe

Как использовать javascript или jQuery для закрытия iframe внутри самого iframe? Я пробовал <a href="javascript:self.close()">, но это не сработало.

4b9b3361

Ответ 1

"Закрытие" текущего iFrame невозможно, но вы можете сказать родительу манипулировать dom и сделать его невидимым.

В IFrame:

parent.closeIFrame();

В родительском:

function closeIFrame(){
     $('#youriframeid').remove();
}

Ответ 2

function closeWin()   // Tested Code
{
var someIframe = window.parent.document.getElementById('iframe_callback');
someIframe.parentNode.removeChild(window.parent.document.getElementById('iframe_callback'));
}


<input class="question" name="Close" type="button" value="Close" onClick="closeWin()" tabindex="10" /> 

Ответ 3

Используйте это, чтобы удалить iframe из родителя внутри самого iframe

frameElement.parentNode.removeChild(frameElement)

Он работает только с одним и тем же источником (не допускается с перекрестным происхождением)

Ответ 4

Ни одно из этих решений не работало для меня, поскольку я участвую в междоменном сценарии, создавая букмарклет, такой как Pinterest Pin It.

Я нашел шаблон букмарклета в GitHub https://gist.github.com/kn0ll/1020251, который решил проблему закрытия Iframe, отправляющего команду изнутри.

Поскольку я не могу получить доступ к любому элементу из родительского окна в IFrame, это сообщение может быть сделано только для публикации событий между двумя окнами, используя window.postMessage

Все эти шаги находятся в ссылке GitHub:

1- Вам нужно ввести JS файл на родительскую страницу.

2- В этом файле, введенном родителем, добавьте список событий окна

    window.addEventListener('message', function(e) {
       var someIframe = window.parent.document.getElementById('iframeid');
       someIframe.parentNode.removeChild(window.parent.document.getElementById('iframeid'));
    });

Этот слушатель будет обрабатывать закрытие и любое другое событие, которое вы пожелаете

3- Внутри страницы Iframe вы отправляете команду закрытия через postMessage:

   $(this).trigger('post-message', [{
                    event: 'unload-bookmarklet'
                }]);

Следуйте шаблону https://gist.github.com/kn0ll/1020251, и все будет в порядке!

Надеюсь, что это поможет,

Ответ 5

его вид хакки, но он хорошо работает

 function close_frame(){
    if(!window.should_close){
        window.should_close=1;
    }else if(window.should_close==1){
        location.reload();
        //or iframe hide or whatever
    }
 }

 <iframe src="iframe_index.php" onload="close_frame()"></iframe>

то внутри рамки

$('#close_modal_main').click(function(){
        window.location = 'iframe_index.php?close=1';
});

и если вы хотите получить фантазию через

if(isset($_GET['close'])){
  die;
}

в верхней части страницы фрейма, чтобы сделать эту перезагрузку незаметной

так что в первый раз при загрузке кадра он не скроется, но в следующий раз, когда он загрузит его, вызовите функцию onload, а родитель будет иметь окно var, заставляющее кадр закрыть