循环访问 Iframe 集合时出现 Javascript 错误 --> 防止错误的索引问题

标签 javascript jquery iframe internet-explorer-8

我正在比较 javascript 中的所有 iframe,看看其中一个是否与我的元素(a 标签)的 body 元素匹配。我遇到的问题是 iframe 的集合有时会发生变化,因为它们都是由框架生成的。因此,有时我会在 IE8 中收到“访问被拒绝”错误,有时则不会。我没有引用任何外部 Iframe,因为我的所有 Iframe 都是框架的一部分,因此具有相同的协议(protocol)、端口等。这是我用来循环 iframe 集合的代码:

var calculatedwidth = 0;
var calculatedheight = 0;

var searchbody = $(srcElement).closest('body');
//I store the Iframe-nodelist in var arrFrames
var arrFrames = document.getElementsByTagName("iframe");
LabelA1:
for(i = 0; i<arrFrames.length; i++){
    //console.log(i);
    //if(arrFrames[i].id != 'PeopleDetailsIframe'){

        if($(arrFrames[i].contentWindow.document.body).is(searchbody)){
        // This line is where the error occures normaly
               calculatedwidth = $(arrFrames[i]).offset().left;
               calculatedheight = $(arrFrames[i]).offset().top;
               break LabelA1;
        }
        else{
              //console.log("Forum Iframe not found");
            }
     }  
}  

我通过包含一个中断来暂时解决我的问题,如果找到我搜索的 iframe,则可以跳出循环。这在我的代码执行的大约 80% 的时间里有效。但由于网页是可定制的,一些用户回应说,当我的代码运行时,他们收到了 javascript 错误。基于我对此主题所做的一些研究Cross-Domain scripting , Scripting with Iframe Collection ,我了解到 iframe 集合是一个 live-collection?所以这意味着当我循环它时,集合必然会改变(有时)。所以我假设这可能会导致 2 个错误,无限循环或错误的索引错误。我认为将 iframe 的引用存储在 var 中可以防止错误。但显然我错了:

var arrFrames = document.getElementsByTagName("iframe");

这没有帮助。有什么建议可以防止错误的索引问题吗?或者我对我的问题所在完全错误? 非常感谢您的帮助!

最佳答案

您可以在 if() 周围放置一个 try-catch。这样循环应该始终运行而不会出现错误。

var calculatedwidth = 0;
var calculatedheight = 0;

var searchbody = $(IframeDocument).closest('body');
var arrFrames = document.getElementsByTagName("iframe");
LabelA1:
for(i = 0; i<arrFrames.length; i++){
    //console.log(i);
    //if(arrFrames[i].id != 'PeopleDetailsIframe'){

        try {
            if($(arrFrames[i].contentWindow.document.body).is(searchbody)){
            // This line is where my the error occures normaly
                   calculatedwidth = $(arrFrames[i]).offset().left;
                   calculatedheight = $(arrFrames[i]).offset().top;
                   break LabelA1;
            }
            else{
                  //console.log("Forum Iframe not found");
                }
        } catch() {
            // the IFrame has security issue => avoid it
        }
     }  
}  

关于循环访问 Iframe 集合时出现 Javascript 错误 --> 防止错误的索引问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7442023/

相关文章:

javascript - 溢出时调整字体大小以适合内容

javascript - 如何保持滚动条始终在底部?

html - 缩小堆叠图像以适合 parent 的高度

javascript - 如何在网站上放置透明 Flash 并保持底层网站可用(焦点、点击、表单提交等)

javascript - div点击事件在iframe结束时不上升?

使用azure移动服务脚本时出现javascript错误

javascript - Google 图表柱形图宽度

javascript - 有没有办法批量套用多个CSS样式,避免多次回流?

jquery - 获取下一个相同类型的元素

jquery - 显示/隐藏 div 不起作用