2013-07-02 12 views
10

Witryna, nad którą pracuję, ma wtyczkę Live Chat na elemencie iframe. Próbuję zmienić obraz, jeśli nie ma dostępnych agentów. Mój kod działa na konsoli, ale nic na tej stronie.Tworzenie skryptu do momentu załadowania elementu iframe przed uruchomieniem

  var LiveChatStatus = $("iframe").contents().find(".agentStatus").html(); 
      if (LiveChatStatus =="Offline"){ 
       $('#liveChat').html('<img src="%%GLOBAL_ShopPath%%/product_images/theme_images/liveoffline.png">'); 
      } 

Próbowałem to:

$('iframe').ready(function(){ 
      var LiveChatStatus = $("iframe").contents().find(".agentStatus").html(); 
      if (LiveChatStatus =="Offline"){ 
       $('#liveChat').html('<img src="%%GLOBAL_ShopPath%%/product_images/theme_images/liveoffline.png">'); 
      } 
    }); 

I tak:

$(document).ready(function(){ 
      var LiveChatStatus = $("iframe").contents().find(".agentStatus").html(); 
      if (LiveChatStatus =="Offline"){ 
       $('#liveChat').html('<img src="%%GLOBAL_ShopPath%%/product_images/theme_images/liveoffline.png">'); 
      } 
    }); 

Ale nie pracował

Odpowiedz

22

Najlepszym rozwiązaniem jest zdefiniowanie funkcji w swoim rodzicem takiego jak function iframeLoaded(){...} i następnie użyj iframe:

$(function(){ 
    parent.iframeLoaded(); 
}) 

działa to w różnych przeglądarkach.

Jeśli nie można zmienić kod w iframe, najlepszym rozwiązaniem będzie dołączyć zdarzenie load do iframe ..

$(function(){ 
    $('iframe').on('load', function(){some code here...}); //attach the load event listener before adding the src of the iframe to prevent from the handler to miss the event.. 
    $('iframe').attr('src','http://www.iframe-source.com/'); //add iframe src 
}); 
+0

Yotam, nie mogę dodać kod w iframe –

+0

Zaproponuj '$ ('iframe ') .on (' load ', function() {jakiś kod tutaj ...}); 'W pewnym momencie historii jQuery, $ element.load() stopp ed działa w ten sposób. –

+0

@ BobStein-VisiBone haha ​​true. Zaktualizowałem swoją odpowiedź sprzed 4 lat. Dzięki :) –

5

Innym sposobem wiązać przypadku obciążenia iframe jest dołączenie nasłuchiwania obciążenia w elemencie iframe przed dodaniem znacznika src do elementu iframe.

Oto prosty przykład. Będzie to również działać w przypadku elementów iframe, których nie kontrolujesz.

http://jsfiddle.net/V42ts/

// First add the listener. 
$("#frame").load(function(){ 
    alert("loaded!"); 
}); 

// Then add the src 
$("#frame").attr({ 
    src:"https://apple.com" 
}) 
1

Znalazłem to na stronie internetowej Elijah Manor, który działa bardzo dobrze

function iFrameLoaded(id, src) { 
 
    var deferred = $.Deferred(), 
 
     iframe = $("<iframe class='hiddenFrame'></iframe>").attr({ 
 
      "id": id, 
 
      "src": src 
 
     }); 
 

 
    iframe.load(deferred.resolve); 
 
    iframe.appendTo("body"); 
 

 
    deferred.done(function() { 
 
     console.log("iframe loaded: " + id); 
 
    }); 
 

 
    return deferred.promise(); 
 
} 
 

 
$.when(iFrameLoaded("jQuery", "http://jquery.com"), iFrameLoaded("appendTo", "http://appendto.com")).then(function() { 
 
    console.log("Both iframes loaded"); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

Awesome! Działa jak urok, dzięki! – Kryptman

Powiązane problemy