Как закрыть iframe внутри самого iframe - PullRequest
47 голосов
/ 20 июля 2011

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

Ответы [ 5 ]

69 голосов
/ 20 июля 2011

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

В IFrame:

parent.closeIFrame();

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

function closeIFrame(){
     $('#youriframeid').remove();
}
14 голосов
/ 02 марта 2014
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" /> 
4 голосов
/ 23 февраля 2015

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

frameElement.parentNode.removeChild(frameElement)

Работает только с тем же источником (не разрешено с перекрестным происхождением)

2 голосов
/ 26 марта 2017

Ни одно из этих решений не помогло мне, так как я нахожусь в междоменном сценарии, создающем букмарклет, такой как 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 и все будет хорошо!

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

1 голос
/ 22 сентября 2015

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

 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, и у родителя будетпеременная окна, приводящая к закрытию рамки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...