2013-03-09 2 views
1

Есть ли способ заблокировать определенные HTML-элементы от создания в IFrame?Блокирование произвольных элементов из iframe

Я не использую JQuery, но я не против использовать его.

Мой базовый код, как:

<iframe id="id_frame_01" src="somepage"></iframe> 
<script type="text/javascript> 

frame = document.getElementById('id_frame_01').contentWindow.document; 

frame.onload = function(){ 
    var toremove = frame.getElementsByTagName('iframe'); 
    toremove.outerHTML = ''; 
    toremove = frame.getElementsByTagName('object'); 
    toremove.outerHTML = ''; 
} 

</script> 

У меня есть полный доступ к содержанию IFRAME, но если я пытаюсь удалить элементы вручную после события OnLoad, событие OnLoad является слишком далеко и (пример) начнется воспроизведение видео на YouTube.

Я знаю идентификаторы элементов для удаления, но я предпочитаю не использовать их, потому что веб-сайт «обновление» может нарушить работу системы. Вместо этого я предпочитаю фильтровать по типу элементов.

Это страница браузера, только для Chrome.

Есть ли способ связать событие onchange с незастроенным элементом?

Есть ли способ перехватить загрузку элементов?

+1

Это может быть возможно сделать с помощью трюков, которые использует [x-tags project] (http://x-tags.org/index). – Pointy

+1

На самом деле я узнал, что могу использовать 'frame.addEventListener (« DOMNodeInserted », function() {...})', даже если на самом деле я косвенно обнаружил это на странице проекта x-tags. Благодарю вас! – SGH

+1

Обратите внимание, что события, такие как DOMNodeInserted, устарели https://developer.mozilla.org/en-US/docs/Mozilla_event_reference – Christophe

ответ

1

Вместо того, чтобы загружать страницу непосредственно в iframe, вы можете использовать ajax (или $ .ajax с jQuery). Это позволит вам фильтровать html страницы и вводить только контент, который вы хотите видеть.

Вы говорите, что у вас есть полный доступ к содержимому iframe, поэтому я предполагаю, что ваша реализация следует за same origin policy.

+0

Это происходит, поскольку я помещаю allow-same-origin в список тегов. Похоже, что это хорошая идея, даже если мне придется больше «играть», чтобы вручную удалить элементы из кода HTML. Мне нравятся работы более низкого уровня. В случае, если я не получу никакого другого ответа в течение пары дней, я постараюсь не забыть отметить ваш как лучший ответ. – SGH

+1

Посмотрите на jQuery $ .load, который позволит вам выбрать нужный элемент (а не отфильтровывать те, которые вам не нужны). – Christophe

+0

Страница печально меняется много раз, и вместе с ней внутренние элементы меняют идентификатор, тип и т. Д. Думаю, я буду придерживаться единственного ответа. – SGH