2011-09-16 26 views
1

我比較了javascript中的所有iframe,以查看它們中的一個是否與我的元素(a -tag)正文元素匹配。我遇到的問題是,iframe的集合有時可能會改變,因爲它們都是由框架生成的。因此,有時我會在IE8中得到「訪問被拒絕」的錯誤,有時我不會。我沒有引用任何外部的I幀,因爲我所有的iFrame是框架的一部分,因此具有相同的protocoll,港口等,這是我通過iframe收集使用循環代碼:當通過iframe集合循環時出現Javascript錯誤 - >防止索引錯誤

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系列是一個現場收藏?所以這意味着當我循環播放時,集合必然會改變(有時)。所以我認爲這會導致2個錯誤,無限循環或錯誤的索引錯誤。我認爲將參數存儲在var中可以防止錯誤發生。但顯然我錯了:

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

這沒有幫助。任何建議如何防止錯誤的索引問題?或者我完全錯了我的問題在哪裏? 非常感謝幫助!

回答

0

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

上帝啊,我怎麼會失明!感謝您的配偶。現在工作:) – Abhischek

相關問題