2011-08-11 1 views
2

IframeのIframeのデータにアクセスしようとしています。私のjavascript関数を強制的にjqueries.load関数を使用して待機します。しかし、まだ私のJavaScriptコードはiframeのコンテンツが完全に読み込まれる前に "時には"実行されます。ときどき、私はその動作が異なるコンピュータで異なることを意味します。低速のコンピュータでは、ほとんどの場合、コードがほぼ常に実行されるようになっています。だから私は、Internet Explorer 8がonloadイベントを早期に起動すると思われる。 iframeのすべての要素がロードされるまで待つjquery関数はありますか?Iframeのコンテンツ(テキスト、画像)が読み込まれる前にJquery( '#iframeid').load()が実行されます。

これは私のコードです:

function parsePeopleLink(){ 
try{ 
    //This is where I check if the wanted I frame already exists 
    if(document.getElementById('isolatedWorkArea') != null) { 
     if(window.frames[2] != null) { 
      if(window.frames[2].name == 'isolatedWorkArea') { 
       //This is where I want the following code only to be executed when the Iframe's content is fully loaded, otherwise I get an access denied error when trying to change Userlinks 
       $('#isolatedWorkArea').load(function() { 
        for(var i = 0; i < window.frames.length; i++){ 
         for(var j = 0; j< window.frames[i].document.frames.length; j++){ 
          IframeDocument = window.frames[i].document.frames[j].document; 
          changeUserLink(findPeopleIDfix(findPeopleID(IframeDocument)),findUserLinks(IframeDocument),8, IframeDocument); 
         } 
        } 
       }); 
      } 
      else { 
       throw e; //I know that all the nested else statements are ugly, I just inserted them for testing purposes 
      } 
     } 
     else { 
      throw e; 
     } 
    } 
    else { 
     throw e; 
    } 
} 
catch(e) { 
    //alert(e.description); 
    for(var k = 0; k < window.frames.length; k++) 
    { 
     IframeDocument = window.frames[k].document; 
     changeUserLink(findPeopleIDfix(findPeopleID(IframeDocument)),findUserLinks(IframeDocument),9, IframeDocument);  
     iframeindex++; 
    } 
    } 
} 

すべてのIフレームを持っている:同じポート、のprotocoll、およびSRCを。 ヘルプは大変ありがとうございます

答えて

3

JavaScriptが完全に読み込まれたときに、Javascriptは外部のコンテンツにアクセスして監視することができません。 iframeコンテンツにアクセスできる場合は、親ウィンドウの関数に呼び出しを追加してトリガーします。

親ページ:

function parsePeopleLink() { 
    //all your current code like you have it now 
} 

フレームページ:

$(function(){ 
    parent.parsePeopleLink(); 
    //This will monitor the document being ready in the framed page 
    //and then trigger the parent's function 
}); 
+0

私は外部コンテンツを読み込もうとしていません。誤解を募らせてください。 Iframe内のコンテンツはUserIdのリンクと画像で、私はこれらのリンクを私が設計したカスタムリンクに変更したいと考えています。私のメインJavascriptスクリプトは親ページによって$(document).ready(function(){})で呼び出されます。この関数(パーサー)はiframe内のすべてのリンクをカスタムリンクに変更する必要があります。 Iframeによってレンダリングされるので、iframeのコンテンツを変更するアクセス権はありません。あなたのソリューションについてもう少し詳しく説明できますか? – Abhischek

+0

親ページはiframeコンテンツにアクセスして、ロードできないことを判断する必要があります。フレーム化されたページは、ロードされたことを親ページに知らせる関数をトリガする必要があります。その後、あなたはparsePeopleLink関数をトリガすることができます。私の言いたいことを示すために上のコードを編集します。 –

+0

コンテンツがSTARTS読み込み時にiframeでLOADイベントが発生し、完了していないときに発生します。 Iframe内から$(document).ready()を実行し、親ウィンドウで関数を呼び出す必要があります。 –

0

どのようにiframeの読み込みを開始していますか?これらのソリューションをチェックすると、

$('#myiframe').attr('src', 'http://example.com'); 
$('#myiframe').load(function() { /* do work on load */ }); 

のパターンが動作すると報告されています。

同様の報告ソリューション:

jQuery .ready in a dynamically inserted iframe
Javascript callback when IFRAME is finished loading?

編集:ニック・スピアーズが正しい答えを持っているよう

が見える、あるいは少なくともそれはあなたの問題の一部です。 iframeコンテンツの問題にアクセスします。

+0

いいえ、うまくいきません。私はまだInternet ExplorerでAccess deniedエラーが発生します。そしてちょうどbtw:私はこの関数を使用していると思った:[Jquery.load()](http://api.jquery.com/load-event/) – Abhischek

+0

引数に基づいて2つの 'load'メソッドがあることが分かります過負荷。私はこれに関する編集を追加します。 – numbers1311407

+0

Iframeのsrcを再設定しますか?正直言って私は実際にIframeを自分で読み込んでいません。それはフレームワークによって読み込まれます。だから私はiframeのsrcを設定することが私を助けるだろうか分からない? – Abhischek

3

私は私のプロジェクトの一つで、そのようなものを使用。私はファイルをダウンロードしようとしていて、ダウンロードが完了した後にメッセージを表示しようとしていました。この種のことは、私の経験では動作しませんでした:IFRAMEはHTMLで書かれている

$('#myiframe').attr("src","http://example.com"); 
$('#myiframe').load(function() { /* do work on load */ }); 

Loadイベントが起動した直後でないとき、その内容のすべてのiframeがロードされます。しかし、このコードは正常に動作しました:

$('#myiframe').load("http://example.com", function() { /* do work on load */ }); 

このコードは、ファイルをダウンロードしてからロードイベントを待っていました。私はこれもあなたのために働くことができると思う。

$("#twitter-widget").load(myFunction); 
-1

は、私は私の機能を実行する前にロードされた(それだIDで識別される)ことを確認iFrameを作るために、このコードを使用しましたIE、 私は文字通りStackoverflow.Comに記載されているすべてのソリューションを試しましたが、何も私が望むように働いていませんでした。

次に、iフレームのコンテンツが完全に読み込まれると、$(Window)ロードイベントが発生する可能性があるというアイデアがありました。 それはまさに何が起こったのか。 だから、私はこの小さなスクリプトを書いた、と魔法のように働いた:

$(window).load(function() { 
     //alert("Done window ready "); 
     var lblWait = document.getElementById("lblWait"); 
     if (lblWait != null) { 
      lblWait.style.visibility = "false"; 
      document.getElementById("divWait").style.display = "none"; 
     } 
    }); 

は、この情報がお役に立てば幸いです。

1

Iフレームの内容が完全にロードされたとき、私は待っているスピナーのdivを非表示にしたかった:

関連する問題