Просмотр полной версии : setInterval
K.A.T.A.F.A.L.K.E.R
07.04.2006, 19:29
Столкнулся с такой траблой. Есть у меня свф-ка, я ее подгружаю в какой-нить контейнер, делаю на всяк. случай _lockroot=true (это я так, к слову), и спустя несколько секунд подгруженный мув удаляю. Да только проблема: та свф-ка практически беспорядочно (так задумано) создает интервалы через setInterval и после ее удаления интервалы остаются и продолжают выполняться :eek: Как бы логично ли это? Ведь после этого у меня мой мув в трейс начинает выводить гадость типа "*** Security Sandbox Violation ***
SecurityDomain [подгруженная свф-ка] tried to access incompatible context [мой мув]"...
И если это логично - как можно очистить интервалы, если их id я не знаю и узнать не могу? Первую тысЧу чистить, что ли???
Это логично.
Возможно не самый личший способ очистки всех интервалов:
for(var i = setInterval(function(){}, 100); i>0; --i){
clearInterval(i);
}
такой способ тут однажды обсуждался:в самом setInterval создаем массив, где и храним все запущенные интервалы,
добавляем метод очищающий все интрвалы из этого массива
// Переписываем setInterval
_global.setInterval = function () {
if (!_global.setInterval.interval) {
_global.setInterval.interval = [];
_global.clearIntervalAll = function () {
for (arg in _global.setInterval.interval) {
clearInterval (_global.setInterval.interval[arg]);
}
};
}
_global.setInterval.interval[_global.setInterval.interval.length] = ASnative (250, 0).apply (_global, arguments);
};
//запускаем
setInterval (function () {trace ("U " + getTimer ())}, 500);
setInterval (function () {trace ("U2 " + getTimer ())}, 100);
//по клику очищаем все
onMouseUp=function(){
clearIntervalAll();
}
http://www.flasher.ru/forum/showthread.php?t=65735&page=1
K.A.T.A.F.A.L.K.E.R
08.04.2006, 20:58
Спасибо, но не в этом суть... Почему флеш ругается на попытки этого setInterval-а вызвать функцию после сноса загруженного мува? Как-то это странно. Мува уже давно нету, но в трейсе - предупреждения о попытке доступа именно из этого мува! С указанием его имени! Т.е. флеш запоминает что метод был вызван именно из подгруженного ролика, т.е. каким-то образом РАЗЛИЧАЕТ интервалы "свои" и интервалы "подгруженные", так почему же он не сносит их после удаления подгруженного ролика? :o
да вобщем setInterval глобальная функция, стало быть ей поровну откуда ее вызвали.., но вот что и где хранится о запущенных интервалах не ясно, зато ясно, что их надо очищать, потому как раз где-то остается ссылка на объект или функцию, то и объект не будет удален из памяти..
но вот что и где хранится о запущенных интервалах не ясно
У меня вообще такое подозрение, что setInterval вызывает системную функцию createTimer (если для винды). В этом случае вся информация о таймерах хранится в системе.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.