Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.11.2009, 20:07
Аспирант
Отправить личное сообщение для mister_maxim Посмотреть профиль Найти все сообщения от mister_maxim
 
Регистрация: 09.02.2009
Сообщений: 57

досрочный выход выполнения из тега script
Здравствуйте!
Мне надо узнать как выполнить досрочный выход из сценария javascript заключенного в <script></script>. Поясняю наглядно:
<script>//скрипт1
...
//что тут надо вставить, чтобы управление перешло на скрипт2, а дальнейшие инструкции в скрипте1 не выполнялись?
...
</script>
<div>Здесь не содержится никаких скриптов.</div>
<script>//скрипт2
//Сюда нам надо попасть!!!!!!
.....
</script>

Спросите зачем мне нужно чтобы не выполнялись дальнейшие инструкции в первом скрипте - отвечаю: я реализую функцию вставки в скрипт, причем ни абы какую, а с возможностью вставлять целые массивы скриптов и прочих DOM элементов вот собственно функция:
//функция разрывает скрипт и вставляет что угодно в разрыв
// i - число-идентификатор вставки(для нахождения), е - то что надо встваить
include=function(i,e)
{
    //находим элемент текущего скрипта
    var scr=document.getElementsByTagName('SCRIPT');
    scr=scr[scr.length-1];
    var s= scr.innerHTML;//получаем код скрипта
    var pos= s.indexOf("include("+i+",");//ищем место вставки по идентификатору
    var end =s.indexOf(");",pos);//конец инструкции вставки
    var pre=s.substr(0,pos);//код до инструкции вставки
    var post=s.substr(end+2);//код после инструкции вставки
    scr.innerHTML=pre;//прежний скрипт в DOM обрезаем слева до встваки
    var par=scr.parentNode;//родительский объект где текущий скрипт
    if(typeof(e)=='string')//скрипт заданный одной строкой
    {
        var el=document.createElement('SCRIPT');//создаем элемент скрипта
        el.setAttribute('src',e); par.appendChild(el);//указываем URI и вставляем после первого скрипта
    }else if(e.length){//массив надо много элементов засунуть
        for(var i=0; i<e.length; i++)//для каждого элемента
        {
            var zn=e[i];//текуший элемент
            if(typeof(zn)=='string'){//элемент является скриптом
                var el=document.createElement('SCRIPT');
                el.setAttribute('src',zn); par.appendChild(el);
            }else{////DOM объект 
                par.appendChild(zn);
            };
        };
    }else{//DOM объект который надо вставить
        par.appendChild(e);
    };
    var scr2=document.createElement('SCRIPT');//оставшуюся часть скрипта вставляем потом
    scr2.innerHTML=post;//заполняем оставшейся частью
    par.appendChild(scr2);//вставляем в конец родительского объекта
    //вот здесь надо написать досрочный выход из scr(изначальный скрипт где производится разрыв includом), технически говоря чтобы управление перешло в самый конец scr, как будто выполнились все оставшиеся после разрыва инструкции в scr, но без выполнения их.
};

//вот пример использования фунции include
...
var a=new Array();
for(var j=1; j<=20; j++)a[j-1]='jsb/'+j+'.js';
include(1,a);
....

Возможно спросите, зачем я так извращаюсь, когда уже известные методы через eval например и с подгрузкой через ajax. Ну это уж мои прихоти.
Ответить с цитированием
  #2 (permalink)  
Старый 18.11.2009, 20:36
Аспирант
Отправить личное сообщение для mister_maxim Посмотреть профиль Найти все сообщения от mister_maxim
 
Регистрация: 09.02.2009
Сообщений: 57

красивого выхода нет.
Понигмив я набрел на статью и там я прочел следующие строки:
Цитата:
Такой обходной маневр для преждевременного завершения скрипта обеспечивает устойчивый способ выхода из скриптового процесса и возврат в функцию или метод. Не все скриптовые языки поддерживают конструкции для такой цели. В JavaScript, например, вы не можете использовать оператор return при исполнении кода верхнего уровня
Значит то что я хочу красиво сделать не реально, ну разве что весь код обвести в try{} после includа сгенерировать исключение и пустой обработчик исключения назначить, но это уже некрасиво, да и слышал что механизм исключения - медлителен.

Последний раз редактировалось mister_maxim, 18.11.2009 в 20:41.
Ответить с цитированием
  #3 (permalink)  
Старый 19.11.2009, 09:24
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

Вы обкурились php по видимому.
Цитата:
Возможно спросите, зачем я так извращаюсь
Я например не буду спрашивать зачем Вы так извращаетесь.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск