如何从<iframe>中获得<div> ?


当前回答

下面的代码将帮助您找到iframe数据。

let iframe = document.getElementById('frameId');
let innerDoc = iframe.contentDocument || iframe.contentWindow.document;

其他回答

下面的代码将帮助您找到iframe数据。

let iframe = document.getElementById('frameId');
let innerDoc = iframe.contentDocument || iframe.contentWindow.document;
var iframe = document.getElementById('iframeId');
var innerDoc = (iframe.contentDocument) ? iframe.contentDocument : iframe.contentWindow.document;

你可以更简单地写:

var iframe = document.getElementById('iframeId');
var innerDoc = iframe.contentDocument || iframe.contentWindow.document;

返回第一个有效的内部文档。

一旦获得了内部文档,就可以像访问当前页面上的任何元素一样访问其内部内容。(innerDoc.getElementById…等等)。

重要提示:确保iframe在相同的域中,否则您无法访问它的内部。这就是跨站点脚本编写。参考:

MDN: <iframe>脚本 MDN:同源策略:跨源脚本API访问

window.parent.document.getElementById("framekit").contentWindow.CallYourFunction('pass your value')

CallYourFunction()是页面内部的函数和它上面的函数动作

你可以使用这个函数来查询页面上的任何元素,不管它是否嵌套在一个iframe(或多个iframe)中:

function querySelectorAllInIframes(selector) {
  let elements = [];

  const recurse = (contentWindow = window) => {

    const iframes = contentWindow.document.body.querySelectorAll('iframe');
    iframes.forEach(iframe => recurse(iframe.contentWindow));
    
    elements = elements.concat(contentWindow.document.body.querySelectorAll(selector));
  }

  recurse();

  return elements;
};

querySelectorAllInIframes('#elementToBeFound');

注意:请记住,页面上的每个iframe都必须是同源的,否则该函数将抛出错误。

以上答案给出了使用Javscript的很好的解决方案。 下面是一个简单的jQuery解决方案:

$('#iframeId').contents().find('div')

这里的技巧是jQuery的.contents()方法,不像.children()只能获取HTML元素,.contents()可以同时获取文本节点和HTML元素。这就是为什么可以使用iframe来获取文档内容的原因。

关于jQuery .contents()的进一步阅读:.contents()

注意,iframe和page必须在同一个域中。