【问题标题】:Javascript errors when looping through Iframe collection --> Prevent wrong index issues循环通过 iframe 集合时出现 Javascript 错误 --> 防止错误的索引问题
【发布时间】:2011-09-16 08:29:47
【问题描述】:

我正在比较我的 javascript 中的所有 iframe,以查看其中一个是否与我的元素(a -tag)的正文元素匹配。我遇到的问题是 iframe 的集合有时会发生变化,因为它们都是由框架生成的。因此,有时我会在 IE8 中收到“访问被拒绝”错误,有时我不会。我没有引用任何外部 iframe,因为我所有的 iframe 都是框架的一部分,因此具有相同的协议、端口等。这是我用来循环 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 scriptingScripting with Iframe Collection 主题所做的一些研究,我了解到 Iframe 集合是实时集合?所以这意味着当我遍历它时,集合必然会发生变化(有时)。所以我假设这会导致 2 个错误,一个无限循环或错误的索引错误。我认为将引用存储到 var 中的 iframe 可以防止错误。但显然我错了:

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

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

【问题讨论】:

    标签: javascript jquery iframe internet-explorer-8


    【解决方案1】:

    您可以在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
            }
         }  
    }  
    

    【讨论】:

    • 天哪,我怎么这么瞎!谢谢你指出它的伙伴。现在工作:)
    猜你喜欢
    • 2020-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多