3

IframeのIframeのデータにアクセスしようとしています。javascript関数を強制的に待機させるには、jqueries.load関数を使用します。しかし、それでも私のjavascriptコードは、iframeのコンテンツが完全に読み込まれる前に「時々」実行されます。時々私は、動作がコンピュータごとに異なることを意味します。低速のコンピューターでは、ほとんどの場合、高速のコンピューターがコードを実行するのを待ちます。したがって、InternetExplorer8がonloadイベントを早期に発生させたのではないかと思います。iframeのすべての要素が読み込まれるまで待機するjquery関数はありますか?

これは私のコードです:

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++;
    }
  }
}

すべてのIframeには、同じポート、protocol、およびsrcがあります。ヘルプは大歓迎です

4

5 に答える 5

3

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
});
于 2011-08-11T14:09:23.380 に答える
3

私は自分のプロジェクトの1つでそのようなものを使用しました。ファイルをダウンロードしようとしていて、ダウンロードが終了した後にメッセージを表示しました。この種のことは私の経験ではうまくいきませんでした:

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

Loadイベントは、iframeがすべてのコンテンツをロードするときではなく、iframeがHTMLで書き込まれた直後に発生します。しかし、このコードは機能しました:

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

このコードは、ファイルがダウンロードされるのを待ってから、loadイベントを発生させました。これはあなたにも役立つと思います。

于 2012-12-12T12:07:23.030 に答える
1

iフレームコンテンツがIEに完全に読み込まれたときに、待機中のスピナーdivを非表示にしたかったので、Stackoverflow.Comに記載されているすべてのソリューションを文字通り試しましたが、期待どおりに機能しませんでした。

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

$(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";
         }
     });

お役に立てれば。

于 2014-12-10T08:00:31.890 に答える
0

iframeの読み込みをどのように/どこでトリガーしますか?これらのソリューションを確認すると、次のパターンになります。

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

動作することが報告されています。

同様に報告された解決策:

IFRAMEの読み込みが完了したときに、動的に挿入されたiframe
JavascriptコールバックでjQuery.ready?

編集:

Nick Spiersが正しい答えを持っているように見えます、または少なくともそれはあなたの問題の一部です。iframeコンテンツのアクセスの問題。

于 2011-08-11T14:02:15.320 に答える
-1

このコードを使用して、関数を実行する前にiFrame(IDで識別される)が読み込まれていることを確認しました。

$("#twitter-widget").load(myFunction);
于 2014-07-02T17:32:32.990 に答える