2011-09-16 1 views
1

私のjavascript内のすべてのiframeを比較して、そのうちの1つが要素の(aタグ)本体要素と一致するかどうかを確認します。私が持っている問題は、フレームワークによってすべて生成されるため、iframeのコレクションが時々変更されることがあるということです。したがって、IE8で「アクセスが拒否されました」というエラーが表示されることがあります。すべての私のインラインフレームは、フレームワークの一部であり、したがって同じのprotocollを持っているので、私は、任意の外部Iフレームを参照していないよ、ポートなどこれは私が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%で動作します。しかし、Webページはカスタマイズ可能なので、コードが実行されたときにJavaScriptエラーが発生すると回答したユーザーもいます。 Cross-Domain scriptingScripting with Iframe Collectionという件に関するいくつかの調査に基づいて、Iframeコレクションがライブコレクションであることを知りましたか?これは、コレクションがループしているときにコレクションが(時には)変更されることを意味します。だから私は、これは2つのエラー、無限ループまたは間違ったインデックスエラーを引き起こす可能性があると仮定した。 varのiframeにrefrenceを格納すると、エラーを防ぐことができると思いました。しかし明らかに私は間違っていた:

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

これは役に立たなかった。どのように私は間違ったインデックスの問題を防ぐことができる任意の提案?あるいは私の問題がどこにあるのかについて完全に間違っていますか? 多くのご協力をいただきました!

答えて

0

try-catchif()のまわりに置くことができます。そうすれば、ループは常にエラーなく実行されます。

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

GODどのように盲目的なことができますか?仲間を賞賛してくれてありがとう。今働く:) – Abhischek

関連する問題