2009-10-22 4 views
1

Я знаю. Можно динамически загружать файл JavaScript и таблицы стилей в заголовок документа. С другой стороны, можно удалить тег сценария и таблицы стилей из заголовка документа. Однако загруженный JavaScript по-прежнему сохраняется в памяти.Можно ли уничтожить загруженный JavaScript, включая функцию & локальную переменную?

Можно ли уничтожить загруженный JavaScript из памяти веб-браузера? Я думаю. Это должно быть что-то вроде следующего псевдокода.

// Scan all variables in loaded JavaScript file. 
var loadedVariable = getLoadedVariable(JavaScriptFile); 

for(var variable in loadedVariable) 
{ 
    variable = null; 
} 

// Do same thing with function. 

Возможно ли создать JavaScript для этого?

Спасибо,

PS. Теперь вы можете использовать xLazyLoader и jQuery для динамического загружаемого контента.

+0

Почему, по-вашему, вам нужно? – moonshadow

+0

Потому что я хочу создать какое-то веб-приложение, у которого нет iframe. Каждая страница будет загружена через Ajax. Кроме того, JavaScript и таблица стилей будут загружаться в зависимости от требований к странице. После этого движок уничтожит неиспользуемый JavaScript и таблицу стилей для уменьшения повторяющегося имени функции, переменной, правила JavaScript и таблицы стилей. –

ответ

3

Если загруженный скрипт назначается window собственности, например, с рисунком модуля следующим образом:

window.NiftyThing = (function() { 
    function doSomething() { ... } 
    return { 
     doSomething: doSomething 
    }; 
})(); 

или

window.NiftyThing = { 
    doSomething: function() { ... } 
}; 

или

NiftyThing = { 
    doSomething: function() { ... } 
}; 

Тогда вы можете удалите свойство, которое ссылается на него:

delete window.NiftyThing; 

... который удаляет хотя бы одну основную ссылку на него; если есть другие ссылки на него, он не может быть очищен.

Если var ключевое слово было использовано:

var NiftyThing = { 
    doSomething: function() { ... } 
}; 

... то это не свойство, и вы не можете использовать delete, поэтому установка для undefined или null сломается ссылка:

NiftyThing = undefined; 

Вы можете хеджировать ваши ставки:

NiftyThing = undefined; 
try { delete NiftyThing; } catch (e) { } 

Во всех случаях это зависит от реализации JavaScript, чтобы определить, что нет выдающихся внешних ссылок на загруженный скрипт и очистка, но по крайней мере вы даете ему возможность.

Если, как говорит Гуффа, загруженный скрипт не использует шаблон модуля, тогда вам необходимо применить эти правила ко всем его символам. Это еще одна причина, по которой шаблон модуля - это хорошая вещь (tm).;-)

+0

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

+0

Если вы пытаетесь это сделать, не зная, что это вы выгружаете, я думаю, что перед вами впереди много работы. И вы не узнаете, что это даже сработает; сценарий мог установить обработчики событий, которые будут содержать ссылки. Вы можете просто сломать его (обработчик событий пытается вызвать функцию с помощью символа, который вы удалили), а не удалять его. –

1

Возможно, возможно удалить файл Javascript, который был загружен, но это не отменяет то, что сделал код, то есть функции, которые были в коде, все еще определены.

Вы можете удалить определение функции, просто заменив его чем-то другим:

myFunction = null; 

Это не удаляет идентификатор, но это не функция больше.

+0

Могу ли я удалить его, установив его как неопределенное значение? –

+0

@Soul_Master: Да, либо неопределенный, либо нулевой будет работать. –

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