2015-09-14 20 views
5

PDF dosyası üreten bir URL'im var. PDF oluşturmak için, bu URL'yi yüklemek ve kullanıcılar için aynı sayfaya PDF dosyası oluşturmak için iframe kullanıyorum.iframe onload, url pdf ouput oluşturduğunda çalışmaz

Kullanıcı, butona tıkladığında ekranda loader gösterecektir. iframe yük tamamlandığında (PDF indirme açılırken) gizlenmelidir. Kodun altında kullandım, ancak çalışmıyor, loader, indirme açılır penceresinin açılmasından sonra gösterilmeye devam ediyor (url'yi google.com gibi başka biriyle değiştirirsem o zaman işe yarayacaktır).

İşte kod snippet'im.

iframe tam yük div ajax_loading gizlemek gerekir

$("#test").click(function(){ 
 
    iframe = document.getElementById("download-container1"); 
 
    if (iframe === null) 
 
    { 
 
    $("#ajax_loading").show(); 
 
    var url="http://test.coachfxlive.com/ajax/ajax-action.php?type=s&vid=0&playlist_id=11&perpage=1&action=get_profile"; 
 
    iframe = document.createElement('iframe'); 
 
    iframe.id = "download-container1"; 
 
    document.body.appendChild(iframe); 
 

 
    $('#download-container1').load(function() { 
 
     $("#ajax_loading").hide(); 
 
    }); 
 
    iframe.src=url; 
 
    } 
 
    
 
});
.ajax_loading { 
 
    background-color: rgba(0, 0, 0, 0.7); 
 
    display: none; 
 
    height: 100%; 
 
    left: 0; 
 
    position: fixed; 
 
    top: 0; 
 
    width: 100%; 
 
    z-index: 99999; 
 
}
<html> 
 
    <head> 
 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
    </head> 
 
    <body> 
 
    <div class="ajax_loading" id="ajax_loading"><span>Please Wait... Loading</span></div> 
 
    <button id="test">click</button> 
 
    </body> 
 
</html>

. Burada yanlış bir şey yapıyorum? başka bir çözüm var mı?

Şimdiden teşekkürler.

cevap

0

iframe'in tam olarak yüklenip yüklenmediğini kontrol etmek için readystate iframe özelliğini kullanabilirsiniz. Ancak, içerikler ikili dosya ise Chrome'da çalışmaz.

iframe url her ikinci iframe Readystate özelliği denetler ayarlandıktan sonra:

$("#test").click(function(){ 
iframe = document.getElementById("download-container1"); 
if (iframe === null) 
{ 
    $("#ajax_loading").show(); 
    var url="http://test.coachfxlive.com/ajax/ajax-action.php?type=s&vid=0&playlist_id=11&perpage=1&action=get_profile"; 
    iframe = document.createElement('iframe'); 
    iframe.id = "download-container1"; 
    document.body.appendChild(iframe); 

    //$('#download-container1').load(function() { 
    //  $("#ajax_loading").hide(); 
    //}); 
    iframe.src=url; 
    checkFinishedDownload(iframe); 
} 

}); 

function checkFinishedDownload(ifr) { 
    if (ifr.readyState == "complete" || ifr.readyState == "interactive") { 
     // Here hide the spinner 
     $("#ajax_loading").hide(); 
    } 
    else { 
     setTimeout(function() { 
      checkFinishedDownload(ifr); 
     }, 1000); 
    } 
} 
} 

sorumu Kontrol: Iframe.readyState does not work in chrome

DÜZENLEME:

: firefox olarak Eğer onload olay kullanabilirsiniz
function checkFinishedDownload(ifr) { 
    if ($.browser.mozilla) { 
     ifr.onload = function() { 
      $("#ajax_loading").hide(); 
      } 

    }else{ 
      iframeCheck(ifr); 
    } 
} 

function iframeCheck(iframe){ 
     if (iframe.readyState == "complete" || iframe.readyState == "interactive") { 
     // Here hide the spinner 
     $("#ajax_loading").hide(); 
    } 
    else { 
     setTimeout(function() { 
      checkFinishedDownload(iframe); 
     }, 1000); 
    } 
} 
+0

Aynı şeyi firefox'da denedim, ancak benim için işe yaramadı. –

+0

lütfen, düzenlenmiş cevabımı kontrol edin. Firefox'ta 'loadload 'olayınız var. Iframe dom elementinin üzerine eklemelisiniz. – anmarti

+0

Safari ve krom için herhangi bir çözüm var mı? –