Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Узнать строку и символ, где возникла ошибка (вопрос по eval и new Function) (https://javascript.ru/forum/misc/31820-uznat-stroku-i-simvol-gde-voznikla-oshibka-vopros-po-eval-i-new-function.html)

FINoM 21.09.2012 20:02

Узнать строку и символ, где возникла ошибка (вопрос по eval и new Function)
 
try {
 eval( 'var x = 5;\
  var = 6' ); } catch( e ) {
  console.log( e )
}

В объекте ошибки можно увидеть только type, message и stack. Как узнать, где именно возникла ошибка?

FINoM 21.09.2012 20:41

Maxmaxmахimus, щитаймана постамана шайтана.

oneguy 21.09.2012 20:45

Если нужно выловить синтаксическую ошибку в коде eval, то можно записать код в eval в отдельный скрипт и выполнить.

FINoM 21.09.2012 21:00

Цитата:

Сообщение от Maxmaxmахimus
e.stack не?

Там не видно строки и столбца.
SyntaxError: Unexpected token =
    at eval (eval at <anonymous> (unknown source))
    at eval (native)
    at Object.InjectedScript._evaluateOn (unknown source)
    at Object.InjectedScript._evaluateAndWrap (unknown source)
    at Object.InjectedScript.evaluate (unknown source)

FINoM 21.09.2012 21:03

Цитата:

Сообщение от oneguy
Если нужно выловить синтаксическую ошибку в коде eval, то можно записать код в eval в отдельный скрипт и выполнить.

Каким образом? Если через объект URL, то он не кроссбраузерен.

oneguy 21.09.2012 21:11

Цитата:

Сообщение от FINoM
Каким образом? Если через объект URL, то он не кроссбраузерен.

Через copy и paste :) Можно вывести код eval каким-то способом, и потом вставить его на страницу.

melky 21.09.2012 22:47

Цитата:

Сообщение от FINoM
В объекте ошибки можно увидеть только type, message и stack. Как узнать, где именно возникла ошибка?

оно ?
<script>
window.onerror = function (description, url, line) {
    alert("Где возникла ошибка : " + url + "\n\nОшибка на линии : " + line + "\n\nСама ошибка : " + description);
    return true;
};
</script>

<script>ОШИБКА!</script>

FINoM 21.09.2012 22:58

melky, нет.

Лучше объясню, что мне нужно: я беру аяксом (именно аяксом) некоторый код, меняю его, запускаю. Нужно узнать, в какой строке и каком столбце (позиции "курсора") появилась ошибка.

oneguy 22.09.2012 00:02

Можно подробнее, пожалуйста? Где меняешь код и как?

FINoM 22.09.2012 00:08

Допиливаю эту функцию: http://javascript.ru/forum/project/2...ak-v-node.html
Если в модуле появляется ошибка, неизвестно где она.

melky 22.09.2012 00:30

Цитата:

Сообщение от Maxmaxmахimus (Сообщение 205818)
melky,
тред не читал да? нужно в eval и Function.
ПО сути моджно все это вставлять в тек script и по нему мерить onerror'ом

ото ж.


...
<script>



window.onerror = function (description, url, line) {
    alert("Где возникла ошибка : " + url + "\n\nОшибка на линии : " + line + "\n\nСама ошибка : " + description);
    return true;
};

function superEval (code) {
    var doc = document;
    doc.body.appendChild(doc.createElement("script")).innerHTML = code;
}

superEval("alert('Hello World!');\n\n\n\n      LOL");

</script>

FINoM 22.09.2012 00:37

melky, а как узнать, что ошибка именно в целевом скрипте, а не каком-то другом? Я вижу только вариант с айфреймом (для каждого скрипта создавать айфрейм).

melky 22.09.2012 01:01

Цитата:

Сообщение от FINoM (Сообщение 205825)
melky, а как узнать, что ошибка именно в целевом скрипте, а не каком-то другом? Я вижу только вариант с айфреймом (для каждого скрипта создавать айфрейм).

если скрипт подключается через тег, то там будет url - в обработчике.

если через ajax берётся и eval'тся, то надо как-то отыскивать этот скриптец. мб просто реализовать стековый тип данных ?? (последним вошёл, последним вышел)

FINoM 22.09.2012 01:31

melky, фиг знает, слишком геморно. Наверно, все-таки, айфрейм.
Цитата:

Сообщение от Maxmaxmахimus
вообще если архитектура приложения дошла до таких извратов это повод сделать рефакторинг или начать все с нуля.

Ты мне скажи сперва, как решить задачу, которую я определил в первом посте и как по-твоему должна выглядеть архитектура.

FINoM 22.09.2012 02:56

Вот, собсно: http://jsfiddle.net/P4BSx/


Часовой пояс GMT +3, время: 02:27.