2013-03-09 104 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视频开始播放。

我知道要删除的元素的ID,但我不喜欢使用它们,因为网站“更新”可能会破坏系统。相反,我更喜欢按元素类型进行过滤。

这是一个浏览器专用页面,仅限Chrome浏览器。

有没有办法将onchange事件附加到非创建的元素?

有没有办法拦截元素的加载?

+1

它*可能*可以用[x-tags项目](http://x-tags.org/index)使用的技巧来做些事情。 – Pointy 2013-03-09 16:58:48

+1

事实上,我发现我可以使用'frame.addEventListener(“DOMNodeInserted”,function(){...})',即使事实上我间接发现了在x-tags项目页面上。那么谢谢你! – SGH 2013-03-09 17:17:07

+1

请注意,像DOMNodeInserted这样的事件已被弃用https://developer.mozilla.org/en-US/docs/Mozilla_event_reference – Christophe 2013-03-10 00:07:18

回答

1

不是直接将页面加载到iframe中,而是可以使用ajax(或带有jQuery的$ .ajax)。这将允许您过滤页面html并只注入您希望用户看到的内容。

你说你可以完全访问iframe内容,所以我假设你的实现遵循same origin policy

+0

它的确如此,因为我在标签列表中放入了允许同源的东西。无论如何,这似乎是一个好主意,即使我不得不做更多的“玩”来从HTML代码中手动删除元素。无论如何,我喜欢低级作品。如果我几天内没有收到任何其他答案,我会尽量记住将你的答案标记为最佳答案。 – SGH 2013-03-10 15:21:43

+1

看看jQuery $ .load,它可以让你选择你想要的元素(而不是过滤出你不想要的元素)。 – Christophe 2013-03-11 00:22:55

+0

页面可悲地改变了很多次,并且内部元素也改变了ID,类型等。我想我会坚持唯一的答案。 – SGH 2013-03-12 13:02:21