Как мне удалить iframe изнутри самого себя (который был динамически создан и загружен с помощью src)

#javascript

#javascript

Вопрос:

Я хочу иметь возможность удалять iframe изнутри самого себя. Iframe создается динамически, а содержимое загружается с помощью ‘src’.

Я создаю свой iframe следующим образом:

     var i = document.createElement('iframe');
    i.id = 'proxy_frame';
    i.name = 'proxy_frame';
    i.setAttribute('src', url);
    document.body.appendChild(i);
  

Затем из ‘url’ я хочу иметь возможность удалять / закрывать iframe.

Перед загрузкой данных в iframe с помощью src я использовал document.write:

     window.frames['proxy_frame'].document.write(html);
  

и затем я смог удалить iframe с помощью:

     window.parent.document.getElementById("proxy_frame").parentNode.removeChild(window.parent.document.getElementById("proxy_frame"));
  

Но это не работает с ‘src’.

Примечание: Это для букмарклета, поэтому я не хочу использовать jQuery или другую библиотеку.

Комментарии:

1. Находится ли URL в том же домене?

2. Вы имеете в виду, что когда вы устанавливаете src свойство, его больше нельзя удалить? Похоже, вы, возможно, применяете ту же политику происхождения.

3. URL не находится в том же домене. Поэтому, конечно, его та же политика происхождения, чего не произойдет, если я загружу содержимое с помощью document.write(). Спасибо. Мне интересно, могу ли я решить это каким-либо другим способом.

4. И поскольку я не хочу использовать какие-либо библиотеки, json-p действительно не вариант.

Ответ №1:

Определите метод на вашей родительской странице

 function removeElement() {
  var d = document.getElementById('body'); // or any other parent element
  var proxy_frame = document.getElementById('proxy_frame');
  d.removeChild(proxy_frame);
}
  

Чтобы вызвать этот метод из вашего iframe, просто используйте это

 <a href="#" onclick="top.window.removeElement();">Remove me</a>
  

Комментарии:

1. Спасибо, но «Ошибка: отказано в разрешении на доступ к свойству ‘removeElement'» из-за той же политики происхождения, которая обсуждалась выше.

Ответ №2:

Для локального домена iframes вам не нужно полагаться на идентификаторы.

window.parent.document.body.removeChild(window.frameElement);

window.frameElement имеет разумную поддержкуhttps://developer.mozilla.org/en-US/docs/Web/API/Window/frameElement

Ответ №3:

Вы не можете получить доступ к родительской странице, пока она находится в другом домене.

Настройте страницу на своем сайте, которую можно использовать для удаления iframe, затем в iframe вы просто переходите на эту страницу.