copyloc
@copyloc
Человек то я не глупый, просто притворяюсь

Как сохранить результат выполнения скрипта?

Допустим, есть такой код:
for (var i = 0; i < 5; i++) {
	document.write("Привет, мир" + "<br>");
}


Как сохранить в переменную результат выполнения скрипта?
То есть печатается 5 раз фраза "Привет, мир" и нужно чтобы именно эти пять фраз были в переменной, а не код.

Мои попытки:
var textarea = 'for (var i = 0; i < 5; i++) { document.write("Привет, мир" + "<br>"); }'
var text = window.eval(textarea); // undefined
var text = textarea; // Просто код, который находится в переменной

Скрипт изменять нельзя и заранее он не известен.
  • Вопрос задан
  • 2917 просмотров
Решения вопроса 1
trueClearThinker
@trueClearThinker
Как вариант:
var text = [];

for(var i = 0; i < 5; i++)
   text.push("Привет, мир");

document.write(text.join("<br>"));

Каждая строка будет в отдельном элементе массива.
P.S. Никогда не используйте eval.

Как тогда на счат такой конструкции:
var code = 'for (var i = 0; i < 5; i++) { document.write("Привет, мир" + "<br>"); }';

var func = new Function('document',  code);
var iframe = document.createElement("iframe");
document.body.appendChild(iframe);
func(iframe.contentWindow.document);

var inner = iframe.contentWindow.document.body.innerHTML;


Переменная inner как раз и будет вашим результатом.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
erge
@erge
Примус починяю
var text = "";
for (var i = 0; i < 5; i++) {
  text += "Привет, мир<br>";
}
document.write(text);
Ответ написан
@hedint
Web разработчик
Конкретно в вашем случае можно приделать какой-то костыль типа:
var textarea = 'for (var i = 0; i < 5; i++) { document.write("Привет, мир" + "<br>"); }';
eval(textarea);
text_result = document.getElementsByTagName('body')[0].innerHTML;

Но это очень плохое решение.
1. Используем eval, что само по себе убого.
2. Каждый раз нужен будет новый костыль.
3. ...
Ответ написан
Комментировать
mlnkv
@mlnkv
JavaScript Developer
А что должно быть в переменной по вашей логике? пять раз undefined (именно это возвращает скрипт) или то, что пишется в документ (document.write())??
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы