eval не выполняет код в строке
<script type="text/javascript">
var chr0 = new Uint16Array( 16 );
var Str0;
chr0[0] = 97; // a
chr0[1] = 108; // l
chr0[2] = 101; // e
chr0[3] = 114; // r
chr0[4] = 116; // t
chr0[5] = 40; // (
chr0[6] = 49; // 1
chr0[7] = 41; // )
Str0= String.fromCharCode(chr0[0]);
for (i=1; i<9; i++) {
Str0 += String.fromCharCode(chr0[i]);
}
to_s.innerHTML = Str0; // Выводит (ред. печатает): alert(1)
eval(Str0); // - Это не хочет выполняться !!!
// Этот код выполняется:
//Str0 = "alert(1)";
//eval(Str0);
</script>
Не пойму почему не выполняется строка eval(Str0), при том что если раскоментировать последние две строки то они выплнятся. Подскажите в чём проблема ? |
Цитата:
и почему эта строка выводит алерт? to_s.innerHTML = Str0; И что вам мешает заглянуть в консоль? |
monolithed,
Выводит - в смысле печатает. <body> <p id='to_s'></p> </body> |
Консоль ошибок
Ошибка: illegal character Источник: file:///... ....html Строка 47, Символ 8 Исходный код: alert(1) |
Вопрос всё ещё открыт.
Ошибка illegal character мне ни о чём не говорит, массив chr0 я инициализировал похоже верно так как в Юникоде Basic Latin (базовая латиница) 0000-007F: совпадает с ASCII. Страничка сохранена в Юникоде. Что ещё нужно не пойму. |
var array = [97, 108, 101, 114, 116, 40, 49, 41],
i = array.length;
while (i--)
array[i] = String.fromCharCode(array[i]);
Function(array.join(''))();
Для чего вам этот бред понадобился? |
monolithed,
Спасибо за рабочий пример. - Извините, уже нашёл почему у меня eval(Str0) не выполнялся в первом примере, потому что в Str0 скопировал лишний элемент из массива for (i=1; i<9; i++) Теперь всё работает:
<html><head><title></title></head>
<body></body>
<script type="text/javascript">
var n0 = 8;
var chr0 = new Uint16Array( n0 );
var Str0;
chr0[0] = 97; // a
chr0[1] = 108; // l
chr0[2] = 101; // e
chr0[3] = 114; // r
chr0[4] = 116; // t
chr0[5] = 40; // (
chr0[6] = 49; // 1
chr0[7] = 41; // )
Str0= String.fromCharCode(chr0[0]);
for (i=1; i<n0; i++) {
Str0 += String.fromCharCode(chr0[i]);
}
eval(Str0);
Function(Str0)();
</script>
<html>
|
| Часовой пояс GMT +3, время: 04:04. |