#javascript #html
#javascript #HTML
Вопрос:
Я создал экземпляр (строку) html-документа, который будет открыт, когда пользователь нажмет кнопку. Но я также создаю переменную msg
, в которую следует вставить. Моя проблема в том, что msg
переменная не вставляется в document.getElementById("para").innerHTML = msg;
. Я думаю, из-за другого контекста.
Как я могу вставить переменную в строку HtmlString?
Прямо сейчас я получаю сообщение: ?tempFile:13 Uncaught ReferenceError: msg is not defined
var msg = "message from outer space";
alert(msg); // Alerts "message from outer space"
var htmlString = `<!DOCTYPE html>
<html>
<head>
<title></title>
<script>
alert(msg); // This gives error (undefined)
document.getElementById("para").innerHTML = msg;
</script>
</head>
<body>
<p id="para"></p>
</body>
</html> `
window.open().document.write(htmlString)
Комментарии:
1.
msg
->'${msg}'
, см. Литерал шаблона . Кроме того, ваш код не будет работать, поскольку вы помещаетеscript
тег перед загрузкой dom, поэтомуdocument.getElementById("para")
он будетundefined
. Просто поместитеmsg
ее непосредственно внутри тега:<p id="para">${msg}</p>
2. Если
msg
она поступает из ненадежного источника (например, все, с чем пользователь может работать: ввод, база данных, URL и т. Д.), Вы обязательно должны ее закодировать, Иначе вы уязвимы для XSS.
Ответ №1:
Вы можете использовать интерполяцию строк: `${msg}`
var msg = "message from outer space";
var htmlString = `<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<p id="para"></p>
<script>
alert(${msg}); // This gives error (undefined)
document.getElementById("para").innerHTML = '${msg}';
</script>
</body>
</html> `
хотя, как упоминал Хао Ву, вы могли бы просто добавить сообщение между <p>
тегами. Также лучше всего добавить скрипт в нижней части HTML-текста.
var msg = "message from outer space";
var htmlString = `<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<p id="para">${msg}</p>
</body>
</html> `