Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   eval не выполняет код в строке (https://javascript.ru/forum/misc/26296-eval-ne-vypolnyaet-kod-v-stroke.html)

Dan_G 03.03.2012 18:00

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), при том что если раскоментировать последние две строки то они выплнятся. Подскажите в чём проблема ?

monolithed 03.03.2012 18:06

Цитата:

Сообщение от Dan_G
Подскажите в чём проблема ?

где определяется to_s?
и почему эта строка выводит алерт?
to_s.innerHTML = Str0;

И что вам мешает заглянуть в консоль?

Dan_G 03.03.2012 18:09

monolithed,
Выводит - в смысле печатает.
<body>
<p id='to_s'></p>
</body>

Dan_G 03.03.2012 18:17

Консоль ошибок
Ошибка: illegal character
Источник: file:///... ....html
Строка 47, Символ 8
Исходный код:
alert(1)

Dan_G 03.03.2012 18:49

Вопрос всё ещё открыт.

Ошибка illegal character мне ни о чём не говорит, массив chr0 я инициализировал похоже верно так как в Юникоде Basic Latin (базовая латиница) 0000-007F: совпадает с ASCII. Страничка сохранена в Юникоде. Что ещё нужно не пойму.

monolithed 04.03.2012 13:08

var array = [97, 108, 101, 114, 116, 40, 49, 41],
i = array.length;

while (i--)
    array[i] = String.fromCharCode(array[i]);

Function(array.join(''))();


Для чего вам этот бред понадобился?

Dan_G 04.03.2012 15:55

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, время: 22:51.