iframeが読み込まれているかどうかをどのように検出できますか?


101

ユーザーがボタンをクリックした後にiframeが読み込まれたかどうかを確認しようとしています。

私が持っています

$('#MainPopupIframe').load(function(){
    console.log('load the iframe')
    //the console won't show anything even if the iframe is loaded.
})

HTML

<button id='click'>click me</button>

//the iframe is created after the user clicks the button.
<iframe id='MainPopupIframe' src='http://...' />...</iframe>

助言がありますか?

ちなみに、私のiframeは動的に作成されます。最初のページの読み込みでは読み込まれません。


回答:


185

これを試すことができます(を使用jQuery

$(function(){
    $('#MainPopupIframe').load(function(){
        $(this).show();
        console.log('iframe loaded successfully')
    });
        
    $('#click').on('click', function(){
        $('#MainPopupIframe').attr('src', 'https://heera.it');    
    });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id='click'>click me</button>

<iframe style="display:none" id='MainPopupIframe' src='' /></iframe>

jsfiddleデモ

更新:プレーンを使用javascript

window.onload=function(){
    var ifr=document.getElementById('MainPopupIframe');
    ifr.onload=function(){
        this.style.display='block';
        console.log('laod the iframe')
    };
    var btn=document.getElementById('click');    
    btn.onclick=function(){
        ifr.src='https://heera.it';    
    };
};
<button id='click'>click me</button>

<iframe style="display:none" id='MainPopupIframe' src='' /></iframe>

jsfiddleデモ

更新:これも試すことができます(動的iframe)

$(function(){
    $('#click').on('click', function(){
        var ifr=$('<iframe/>', {
            id:'MainPopupIframe',
            src:'https://heera.it',
            style:'display:none;width:320px;height:400px',
            load:function(){
                $(this).show();
                alert('iframe loaded !');
            }
        });
        $('body').append(ifr);    
    });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id='click'>click me</button><br />

jsfiddleデモ


2
バニラソリューションは素晴らしいです。
Nick

22
load()は非推奨ですが、それはajax関数と競合していたからです。推奨される交換は単純on("load")です。(残念ながら、ドキュメントでは、それがあなたがする必要があるすべてであることを明確に示していません。)
Teepeemm

1
「laod the iframe」-アルファ| 遺産を保護するために進んでいる素敵な小さな覆面編集ゲリラ戦争:P
モハドアブドゥルム

1
グッドキャッチ@MohdAbdulMujib、それは今では古典的なものです:-)
アルファ

1
追加された要素を作成するためのそのメソッドをこれまでに見たことがありません。素敵です、そして私のためにそれを完全に解決しました。よくやった!
indextwo 2018年

3

私はこれをそのように想像します:

<html>
<head>
<script>
var frame_loaded = 0;
function setFrameLoaded()
{
   frame_loaded = 1;
   alert("Iframe is loaded");
}
$('#click').click(function(){
   if(frame_loaded == 1)
    console.log('iframe loaded')
   } else {
    console.log('iframe not loaded')
   }
})
</script>
</head>
<button id='click'>click me</button>

<iframe id='MainPopupIframe' onload='setFrameLoaded();' src='http://...' />...</iframe>

2

onloadイベントも試すことができます。

var createIframe = function (src) {
        var self = this;
        $('<iframe>', {
            src: src,
            id: 'iframeId',
            frameborder: 1,
            scrolling: 'no',
            onload: function () {
                self.isIframeLoaded = true;
                console.log('loaded!');
            }
        }).appendTo('#iframeContainer');

    };
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.