Javascript 显示任何网页的所有框架列表

Javascript 显示任何网页的所有框架列表,javascript,loops,iframe,recursion,frame,Javascript,Loops,Iframe,Recursion,Frame,我想创建一个递归JavaScript循环,它可以使用IFRAMES标记或FRAME标记显示所有帧。结果应给出FrameName、NestingLevel、FrameURL等 例如,当我们在Google Chrome中打开“开发者工具”时,我们可以在控制台选项卡的所有框架中看到七个嵌套框架。 请给出一个递归循环,其中包含错误处理iframe安全问题 示例代码: 在谷歌搜索和探索之后,我找到了一个简单的解决方案,但我认为这个答案应该改进以避免任何可能的错误,即应该进行精确的错误处理以避免跨域帧问题

我想创建一个递归JavaScript循环,它可以使用IFRAMES标记或FRAME标记显示所有帧。结果应给出FrameName、NestingLevel、FrameURL等

例如,当我们在Google Chrome中打开“开发者工具”时,我们可以在控制台选项卡的所有框架中看到七个嵌套框架。

请给出一个递归循环,其中包含错误处理iframe安全问题

示例代码:


在谷歌搜索和探索之后,我找到了一个简单的解决方案,但我认为这个答案应该改进以避免任何可能的错误,即应该进行精确的错误处理以避免跨域帧问题:

样品溶液:

用法:

替代/改进代码:

下面是另一个捷径示例

  var i = new Array;

  function wow(a, n) {
    t = '';
    for (i[n] = 0; i[n] < a.length; i[n]++) {
      try {
        t += a[i[n]].name + ' \n';
      } catch (e) {
        t += 'Error \n';
      }
      if (a[i[n]].frames.length) t += wow(a[i[n]].frames, n + 1);

    }
    return t;
  }

  //Usage:
  console.log(wow(top.frames, 0));

你试过什么吗?或者说给予是你脑海中出现的第一件事?是的,我试过这样的东西,var arrFrames=top.frames;fori=0;iso下一步是描述此代码的错误,您是否有错误。。。并以正确的方式提问我已经做到了。。。我有这个错误,我不明白为什么。。。或者类似的方式…我不知道如何调试错误。请查看问题中的附加代码,并尝试更正它,即使是跨域错误等。错误被标记为未捕获的DOMEException:阻止原点为null的帧访问跨原点帧。请添加错误处理代码
// first parameter is frame (window) in which to get sub frames
// second is the array to build on
function getAllFrames(frame, allFrameArray) {
  allFrameArray.push(frame.frames);
  for (var i = 0; i < frame.frames.length; i++) {
    getAllFrames(frame.frames[i], allFrameArray);
  }
  return allFrameArray;
}
var allFramesArray = getAllFrames(window, new Array());
console.log(allFramesArray.length); // number of frames in array
for (var i = 0; i < allFramesArray.length; i++) {
  try {
    console.log(allFramesArray[i].location.href); // location of first frame in array}
  } catch (e) {
    console.log('Error in Accessing Frame No.' + i); // location of first frame in array}
  }
}
function getAllFrames(frame, allFrameArray) {
  allFrameArray.push(frame.frames);
  for (var i = 0; i < frame.frames.length; i++) {
    getAllFrames(frame.frames[i], allFrameArray);
  }
  return allFrameArray;
}
//Usage:

var allFramesArray = getAllFrames(window, new Array());
console.log(allFramesArray.length); // number of frames in array
for (var i = 0; i < allFramesArray.length; i++) {
  console.log('\n\n No.'+ (i+1) + '.');
  try {
    console.log(allFramesArray[i].id);
    console.log(allFramesArray[i].name);
    console.log(allFramesArray[i].location.href); // location of first frame in array}
  } catch (e) {
    console.log('Error in Accessing Frame No.' + (i+1) ); // location of first frame in array}
  }
}
  var i = new Array;

  function wow(a, n) {
    t = '';
    for (i[n] = 0; i[n] < a.length; i[n]++) {
      try {
        t += a[i[n]].name + ' \n';
      } catch (e) {
        t += 'Error \n';
      }
      if (a[i[n]].frames.length) t += wow(a[i[n]].frames, n + 1);

    }
    return t;
  }

  //Usage:
  console.log(wow(top.frames, 0));