Javascript 在带有iframe的页面上使用document.getElementsByTagName-不会拾取iframe中的元素

Javascript 在带有iframe的页面上使用document.getElementsByTagName-不会拾取iframe中的元素,javascript,iframe,getelementsbytagname,Javascript,Iframe,Getelementsbytagname,更新到javascript。在我的页面上(asp.net应用程序,vb作为服务器端语言),我使用document.getElementsByTagName(“img”)获取所有带img标记的html项目。我注意到一个特别的项目没有出现在这个列表中(我能够将它们放入一个数组中并单独访问这些项目-代码如下)。此项包含在iframe中(iframe不使用SRC或其他任何东西,只是在源代码中定义了它内部的html,不从其他页面加载-这是由运行时生成的crystal reports viewer自动生成的

更新到javascript。在我的页面上(asp.net应用程序,vb作为服务器端语言),我使用document.getElementsByTagName(“img”)获取所有带img标记的html项目。我注意到一个特别的项目没有出现在这个列表中(我能够将它们放入一个数组中并单独访问这些项目-代码如下)。此项包含在iframe中(iframe不使用SRC或其他任何东西,只是在源代码中定义了它内部的html,不从其他页面加载-这是由运行时生成的crystal reports viewer自动生成的,这就是为什么我无法复制以显示此项的原因)。getElementsByTagName是否因为在iframe中而未拾取此图像?我需要能够访问此img的src(图像是crystal report viewer中自动生成的另一项)。如果未拾取此项的原因是由于iframe,是否有任何方法可以在iframe内的项目上运行此项?或者只获取iframe中所有内容的“innerhtml”类型属性,以便可以访问imgsrc。谢谢你的帮助

var IMGmatches = [];
        var IMGelems = document.getElementsByTagName("img");
        for (var j = 0; j < IMGelems.length; j++) {
            IMGmatches.push(IMGelems[j]);
        }
var-IMGmatches=[];
var IMGelems=document.getElementsByTagName(“img”);
对于(var j=0;j
这是因为iframe中的元素不是父文档的一部分

要获取iframe中的任何内容,您需要访问iframe的
contentDocument
。因此,您的代码可能如下所示:

var IMGmatches = [], IMGelems = document.getElementsByTagName("img"),
    iframes = document.getElementsByTagName('iframe'), l = IMGelems.length,
    m = iframes.length, i, j;
for( i=0; i<l; i++) IMGmatches[i] = IMGelems[i];
for( j=0; j<m; j++) {
    IMGelems = iframes[j].contentDocument.getElementsByTagName("img");
    l = IMGelems.length;
    for( i=0; i<l; i++) IMGmatches.push(IMGelems[i]);
}
var-IMGmatches=[],IMGelems=document.getElementsByTagName(“img”),
iframes=document.getElementsByTagName('iframe'),l=IMGelems.length,
m=iframes.长度,i,j;

对于(i=0;i,这里有一个函数,它将返回一组从根开始(包括根)的所有元素,可能的话包括iframe(非CORS)和shadowdom:

const子树=(根,theset)=>{
如果(!theset)theset=new Set();
如果(!root | | theset.has(root))返回该集;
添加(根);
if(root.shadowRoot){
from(root.shadowRoot.children.forEach(child=>subtreet(child,theset));
}否则{
if(root.tagName=='IFRAME'){try{root=root.contentDocument.body;theset.add(root);}catch(err){root=null;/*CORS*/}
if(root&&root.getElementsByTagName)用于(root.getElementsByTagName('*'))子树(子树,theset)的常量子树;
}
返回该集合;
}
子树(文档).forEach(元素=>{
if(elem.style)elem.style.backgroundColor='yellow';
});
TOP
IFRAME