Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Проблема с выполнением скрипта с задержкой (https://javascript.ru/forum/jquery/30884-problema-s-vypolneniem-skripta-s-zaderzhkojj.html)

zevilz 19.08.2012 09:31

Проблема с выполнением скрипта с задержкой [РЕШЕНО]
 
Имеется сайт с интегрированным форумом PunBB. На сайте подключен jquery, на форум установлен плагин, подключающий jquery и jquery с сайта, т.к. мои скрипты не работают через плагин форума. Также подключен плагин dc-floater, который создает свой div контейнер с содержимым моего контейнера #subscribe:
$(document).ready(function() {
	$('#subscribe').addClass("display_none");
});

$(document).delay(15000).queue(function() {

	$('#subscribe').dcFloater({tabText: 'Подпишись!',event: 'click'});

	$('.dc-floater .tab').hover(
		function() {
			$(this).addClass("tab_focus");}
		,function() {
			$(this).removeClass("tab_focus");}
	);
});

В этом скрипте после загрузки страницы прячется контейнер #subscribe и через 15 секунд создается контейнер при помощи плагина dc-floater.
На сайте все работает отлично, но на форуме в консоли через 15 секунд пишет ошибку: Object has no method dcFloater.
Если, например поставить задержку 15милисекунд, то ошибки не будет и контейнер появится. Если отключить форумовский плагин jquery, то все нормально, но не работают скрипты форума. Как я понял, если задержка выполнения скрипта менее времени загрузки страницы, то все проходит отлично, но если задержка больше времени загрузки страницы, то форум как бы вообще прекращает работу всех скриптов и поэтому возникает ошибка. Не подскажете в чем проблема и куда копать? Почему это происходит? Заранее спасибо за ответы

LittlePony 19.08.2012 13:14

надеюсь, я правильно поняла суть вопроса.
Можно сделать последовательное выполнение скриптов. Явно указать, что определённый скрипт выполнять только после загрузки другого.
Примерно так:
var otherscript = document.createElement('script');
otherscript.type = 'text/javascript';
otherscript.async = true;
otherscript.src = ('otherscript.js');
document.getElementsByTagName('head')[0].appendChild(otherscript);
otherscript.onload = function(){
и тут уже то, что должно выполняться после загрузки otherscript.js
}

zevilz 19.08.2012 16:09

Немного не так. Перековырял код форума, нашел вот такой код:
$LAB.setOptions({AlwaysPreserveOrder:false})
.script("http://my-site.net/forum/extensions/pun_jquery/js/jquery-1.7.1.min.js").wait()
.script("http://my-site.net/forum/extensions/fancy_jquery_addons/js/fancy_jquery_addons.min.js").wait()

Похоже после загрузки страницы никакие скрипты не могут исполняться, кроме указанных. Код добавляется при установке расширений.

Скопировал одно из расширений и изменил данные на свои и подключил floater. После установки созданного расширения к вышенаписанному коду добавился вот этот:
.script("http://my-site.net/forum/extensions/subscribe/js/jquery.floater.1.2.js").wait();

В результате, все заработало как надо=)


Часовой пояс GMT +3, время: 17:29.