Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.04.2008, 23:04
Новичок на форуме
Отправить личное сообщение для valex88 Посмотреть профиль Найти все сообщения от valex88
 
Регистрация: 24.04.2008
Сообщений: 1

Вставка кода
Господа! Подскажите пожалуйста как вставить в тело Java-скрипта дополнительный код, полученный спомощью Ajax в виде строки и помещенный в переменную
Ответить с цитированием
  #2 (permalink)  
Старый 24.04.2008, 23:37
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

var text="alert('Hello');";
eval(text);
Ответить с цитированием
  #3 (permalink)  
Старый 24.04.2008, 23:43
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

В IE лучше использовать execScript, в остальных браузерах eval.
Ответить с цитированием
  #4 (permalink)  
Старый 25.04.2008, 02:40
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

А можно вопрос чем лучше?
Быстрее или что?
Ответить с цитированием
  #5 (permalink)  
Старый 25.04.2008, 09:45
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Gvozd
А можно вопрос чем лучше?
function f1() {
  window.eval('function my() { alert(1) }');
}

f1();
alert(my);
Сравните в разных браузерах, в ие в частности.
Ответить с цитированием
  #6 (permalink)  
Старый 25.04.2008, 10:31
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Большое спасибо, учту.
Кстати, что интересно, такай конструкция срабатывает в ие корректно
function f1() {
  window.eval('my=function() { alert(1) }');
}
f1();
alert(my);

Пошел гуглить на эту тему. Если не затруднительно, прошу кинуть еще какие-нибудь примеры на эту тему.
Ответить с цитированием
  #7 (permalink)  
Старый 25.04.2008, 10:37
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Gvozd, потому что конструкция не совсем корректна, попробуйте так
function f1() {
  window.eval('var my=function() { alert(1) }');
}
f1();
alert(my);
Ответить с цитированием
  #8 (permalink)  
Старый 25.04.2008, 11:08
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Все. понял, кажется. Отличия в областях видимости.
eval во всех браузерах кроме ИЕ заносит все что создано в нем в глобальную область видимости. В ИЕ аналогично себя ведет execScript.
а вот eval в ИЕ, работает следующим образом: функции созданные с помощью "function my_func(){}", заносятся в локальную область видимости. в остальных случаях, в зависимости от ключевого слова var.
Вот пример для проверки(закоментированы те алерты, которых нет в глобальной области видимости)
function f2() {
  window.eval('function func_1() { alert(1) } '
			+'func_2=function() { alert(1) }; '
			+' var_1=123;'
			+' var var_2=456;');
  alert('func_1 \n' + func_1 +'\n_______\n'+
		'func_2 \n' + func_2 +'\n_______\n'+
		'var_1 \n'  + var_1+'\n_______\n'+
		'var_2 \n'  + var_2 );
}
f2();
  //alert('func_1 \n' + func_1)
  alert('func_2 \n' + func_2 )
  alert('var_1 \n'  + var_1)
  //alert('var_2 \n'  + var_2 )
Ответить с цитированием
  #9 (permalink)  
Старый 25.04.2008, 11:36
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Вобщем лучше использовать следующую конструкцию:
function myeval(str) { // Обозвать как угодно
  return (window.execScript || window.eval)(str);
}
Ответить с цитированием
  #10 (permalink)  
Старый 25.04.2008, 11:42
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

не совсем лучше. Опера ругается.
Вот так по моему лучше. к тому же чуть меньше ресурсоемкость)))
myeval=window.execScript || window.eval;

Кстати, возник вопрос. помимо eval и execScript, есть ли еще конструкции?

Последний раз редактировалось Gvozd, 25.04.2008 в 11:46.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Расшифровка кода, генерируемого flash. ГостьФорума Общие вопросы Javascript 6 02.02.2011 01:26
Подсветка кода Kolyaj Сайт Javascript.ru 6 14.10.2008 17:28
Правильность кода baal1988 Общие вопросы Javascript 7 06.09.2008 08:58
Непонятные фрагменты кода Макс Общие вопросы Javascript 13 13.08.2008 16:24
Как с помощью JS "на-лету" менять часть HTML кода greendoc Общие вопросы Javascript 2 18.03.2008 20:43