2015-07-06 3 views
-2

У меня есть функция, которую я использую для перезагрузки iframe, и я хочу, чтобы она делала больше вещей после перезагрузки Iframe, а не в одно и то же время.Javascript Предотвращает одну часть функции от выполнения до завершения другого.

var heightArray = []; 

function changeScroll() { 
    console.log(Number(heightArray[0])); 
    $('#vidList').contents().scrollTop(Number(heightArray[0])); 
} 

function changeVideo(source, title, desc) { 
    heightArray = []; 
    $("#current-video_html5_api").attr('src', source); 
    $(".vidTitle").html(title); 
    $(".vidDesc").html(desc); 
    document.getElementById('vidList').contentWindow.location.reload(); 
     //Stuff I want to happen after^this happens 
    var vidListHeight = $('#vidList').contents().scrollTop(); 
    heightArray.push(vidListHeight); 
    console.log(heightArray); 
    changeScroll(); 
} 

Как бы идти о том, чтобы это так все вещи в changeVideo(), которые появляются после того, как на самом деле document.getElementById('vidList').contentWindow.location.reload();произойдет после него. Другими словами, как заставить функцию заканчивать выполнение каждой вещи отдельно, прежде чем запускать следующую (то есть First, heightArray очищается, затем изменяется исходный код curreent-video_html5_api и т. Д.)

+1

В IFRAME при загрузке, вы можете вызвать функцию родительского Iframe, что делает вещи. Или вы могли бы прослушать событие загрузки iframe, но я не думаю, что это разрешено. В любом случае вы, вероятно, столкнетесь с проблемами безопасности. – Jan

+0

@Jan Я не могу поверить, что раньше не думал об этом. <Я получил это сейчас, спасибо. – unironicallyironic

ответ

0

Весь ваш код работает синхронно, вместо перезагрузки Рамка.

Итак, вам нужно позвонить вам код, который вам нужно запустить после того, как вам потребуется асинхронно звонить после перезагрузки этого фрейма.

Рама имеет onload событие, которое вы могли бы подписаться на:

document.getElementById('vidList').load = function() { 
var vidListHeight = $('#vidList').contents().scrollTop(); 
    heightArray.push(vidListHeight); 
    console.log(heightArray); 
    changeScroll(); 
}; 
+0

Пробовал это, и это не сработало, я попробовал решение Джона, и это действительно сработало, и я не понимаю, как я не думал об этом раньше>. <В любом случае, спасибо за помощь. – unironicallyironic

+0

Что значит «не работает»? Есть ли ошибки в консоли? Он печатает результат 'console.log (heightArray);' для консоли? –

+0

Ошибок не было, оно все равно загружалось одновременно. – unironicallyironic

Смежные вопросы