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