#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 вы просто переходите на эту страницу.