Скорее всего, это не даст вам именно то, что вам нужно, а как насчет того, чтобы обернуть текст вашего скрипта внутри функции или литерала самореализующейся функции (function(){/*...*/})()
.
var strEval = 'try{';
strEval += 'widget[' + intWidgetNumber + '] = (function(){';
strEval += js;
strEval += '})();';
strEval += '}catch(e){}';
Это обеспечивает большую защиту, чем прямая eval
, и сохраняет код в том же документе.Недостатком является то, что если код, который вы импортируете, связан с глобальными переменными (возможно, именно поэтому вы задаете этот точный вопрос), у вас все равно может быть их код, растоптанный другим кодом.И если они используют ключевое слово this
, их код, скорее всего, будет работать не так, как задумано.Но это по крайней мере будет держать правильно объявленные переменные и объявления функций в инкапсулированной области видимости.
Я много работал со сторонним кодом (в основном ужасно, ужасно написанным рекламным кодом) и нашел лучшее решение - сохранить код вашего сайта в длинном и уникальном пространстве имен (mySiteUtils,mySiteGames и т. д. или com.mysite.utils, com.mysite.games и т. д.).Если рекламное агентство решит добавить код, соответствующий вашему пространству имен, оно уничтожит вашу страницу, но пока этого не произошло.