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


当前回答

如果iframe不在同一个域中,不能从父域访问它的内部,但可以修改iframe的源代码,那么可以修改iframe显示的页面以向父窗口发送消息,从而允许在页面之间共享信息。一些来源:

https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage Html5 -跨浏览器Iframe postmessage -子到父? 从子节点到父节点的postMessage

其他回答

如果iframe不在同一个域中,不能从父域访问它的内部,但可以修改iframe的源代码,那么可以修改iframe显示的页面以向父窗口发送消息,从而允许在页面之间共享信息。一些来源:

https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage Html5 -跨浏览器Iframe postmessage -子到父? 从子节点到父节点的postMessage

不要忘记在加载后访问iframe。旧但可靠的方法没有jQuery:

<iframe src="samedomain.com/page.htm" id="iframe" onload="access()"></iframe>

<script>
function access() {
   var iframe = document.getElementById("iframe");
   var innerDoc = iframe.contentDocument || iframe.contentWindow.document;
   console.log(innerDoc.body);
}
</script>

其他的答案都对我不起作用。我最终在我的iframe中创建了一个函数,返回我正在寻找的对象:

function getElementWithinIframe() {
    return document.getElementById('copy-sheet-form');
}

然后像这样调用该函数来检索元素:

var el = document.getElementById("iframeId").contentWindow.functionNameToCall();

你可以使用这个函数来查询页面上的任何元素,不管它是否嵌套在一个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都必须是同源的,否则该函数将抛出错误。

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

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