Показать сообщение отдельно
  #7 (permalink)  
Старый 17.06.2009, 21:15
Интересующийся
Отправить личное сообщение для SleepWalker Посмотреть профиль Найти все сообщения от SleepWalker
 
Регистрация: 09.11.2008
Сообщений: 15

таки одна ошибочка была(я просто не занимался проверкой работы кода, который отвечал за внешние скрипты)
scriptStr = scriptStr.slice(scriptStr.indexOf('src=') + 5, scriptStr.indexOf('>') - 1);


теперь все работает. вот функция:
function strToFunc(str) {
    while(str.indexOf('function') != -1) {
        str = str.slice(str.indexOf('function') + 8);
        var fName = str.replace(' ', '');
        while(fName.indexOf(' ') != -1) {
            fName = fName.replace(' ', '')
        }
        fName = fName.slice(0, fName.indexOf('('));
        var fVar = str.slice(str.indexOf('(') + 1, str.indexOf(')'));
        while(fVar.indexOf(' ') != -1) {
            fVar = fVar.replace(' ', '');
        }
        /*fVar = fVar.split(',');
        fVar = fVar.join('", "');*/
        while(fVar.indexOf(',') != -1) {
            fVar = fVar.replace(',', '\\f');
        }
        while(fVar.indexOf('\\f') != -1) {
            fVar = fVar.replace('\\f', '", "');
        }
        fVar = '"' + fVar + '"';
        var fStr = str.slice(str.indexOf('{') + 1);
        if (str.indexOf('function') != -1) {
            fStr = fStr.slice(0, fStr.indexOf('function'));
        }
        fStr = fStr.slice(0, fStr.lastIndexOf('}'));
        while(fStr.indexOf('"') != -1 || fStr.indexOf('\n') != -1) {
            fStr = fStr.replace('"', '\\f').replace('\n', '');
        }
        while(fStr.indexOf('\\f') != -1) {
            fStr = fStr.replace('\\f', '\\"');
        }
        fStr = '"' + fStr + '"';
        window[fName] = new Function(eval(fVar), eval(fStr));
    }
}

единственное, что мне не нравится, так это этот кусок кода.
while(fStr.indexOf('"') != -1 || fStr.indexOf('\n') != -1) {
fStr = fStr.replace('"', '\\f').replace('\n', '');
}
while(fStr.indexOf('\\f') != -1) {
fStr = fStr.replace('\\f', '\\"');
}
что бы нормально заменить все кавычки приходится делать два цыкла. но другого вариант мне на ум не приходит(

Последний раз редактировалось SleepWalker, 17.06.2009 в 23:13.
Ответить с цитированием