нужно знать, когда все внутренние Ифрамы сделаны ...
Ваше предложение напомнило мне о Promise.All в Javascript.
Так что, если я вас правильно понял, jQuery.when()
может служить вашим намерениям. Кроме того, чтобы убедиться, что загрузка страницы не производится до тех пор, пока не будут загружены все iframe, вы можете использовать $. HoldReady
Пример кода, который поможет вам в пути:
<div>
<iframe id="if1" src="./let.html" height="200" width="300"></iframe>
<iframe id="if2" src="./let.html" height="200" width="300"></iframe>
<iframe id="if3" src="./let.html" height="200" width="300"></iframe>
</div>
<script src="./jquery-3.4.1.min.js"></script>
<script>
// call this at the top of your script to delay jQuery's ready event.
$.holdReady(true);
var d1 = $.Deferred();
var d2 = $.Deferred();
var d3 = $.Deferred();
$('#if1').on('load', function() {
alert('iframe 1 Loaded');
d1.resolve();
});
$('#if2').on('load', function() {
alert('iframe 2 Loaded');
d2.resolve();
});
$('#if3').on('load', function() {
alert('iframe 3 Loaded');
d3.resolve();
});
$.when(d1, d2, d3).done(function(v1, v2, v3) {
alert(' All iframes loaded');
$.holdReady(false); // this allows document.ready to begin
// your logic here ...
// At this moment, all iframes are loaded ...
});
$(document).ready(function() {
alert('This page just now finished Loading');
});
</script>
Последовательность предупреждений четко показывает, что происходит. Как видите, jQuery .when () предоставляет способ выполнения функций обратного вызова на основе объектов, представляющих асинхронные события. Пожалуйста, проверьте Документы , если необходимо.
Наконец, поскольку вы вставляете теги <iframe>
динамически, рассмотрите следующий код:
$.holdReady(true); // delay page load until all iframes get loaded
var defer_Array = [];
$.each($('iframe'), (index, tag) => {
let temp = $.Deferred();
defer_Array.push(temp);
$(tag).on('load', function() {
alert('iframe loaded #' + index);
(defer_Array[index]).resolve();
});
})
$.when(...defer_Array).done(function(v1, v2, v3) {
alert(' All iframes loaded');
$.holdReady(false);
// your logic here ...
});
Не стесняйтесь возьмите код и настройте его, как вы будете sh ...:)