通过vanilla JS中的多个iframe来管理DOM

时间:2015-11-24 14:38:37

标签: javascript html dom iframe dom-traversal

我希望能够从一个或多个嵌套的iframe内部向上移动DOM,以获取并清空顶部iframe的父div。如果只有一个iframe,或者如果有两个iframe,我希望我的JS能够工作。

我有一个包含此iframe的主页:

ad.html

然后在function getAdSlot() { var el = window.frameElement.parentNode; for (; el; el = el.parentNode) { if (el.classList && el.classList.contains('ad-unit')) return el; } return false; } var el = getAdSlot(); console.log(el); el.innerHTML = ''; ,iframe中的页面,我有这个JavaScript:

ad-unit

这会占用包含页面的DOM,直到找到类ad.html的div并将其清空。

这很好用。但遗憾的是,有时候<div class="ad-unit"> <div class="ad-unit-large"> <iframe width="970" height="250" src="frame.html"></iframe> </div> </div> 会在嵌套在第一个iframe中的第二个iframe内提供,所以:

frame.html

<iframe width="970" height="250" src="ad.html"></iframe> 将包含:

var el = document;

谁能告诉我如何处理这个案子?我尝试用

开始我的脚本
GMSCameraPosition* cameraPosition = [GMSCameraPosition cameraWithLatitude:self.currentLocation.latitude
                                                                    longitude:self.currentLocation.longitude
                                                                         zoom:10];

    self.myMapView = [GMSMapView mapWithFrame:CGRectZero camera:cameraPosition];
    self.view = self.myMapView;

但是当DOM到达第一个iframe时,它就会停止。无论父节点是div还是iframe,我如何继续向上走?

1 个答案:

答案 0 :(得分:1)

如果您找不到正确的div,则必须使用parent

前往下一个iframe(或顶级window
function getAdSlot(win) {
  var el = win.frameElement.parentNode;
  for (; el; el = el.parentNode) {
    if (el.classList && el.classList.contains('ad-unit')) return el;
  }
  // Reached the top, didn't find it 
  if (parent === top) {
     return false;
  }
  // Try again with the parent window 
  return getAdSlot(parent);
}
var el = getAdSlot();
console.log(el);
el.innerHTML = '';