#javascript #html
Вопрос:
В нижней части моей HTML-страницы я объявил div с текстом функции JavaScript.
<div style="display:none" id="newwinner">
function newwin()
{ nwin = window.open("","_blank", "scrollbars,menubar,toolbar, status,resizable,location");
content = document.body.innerHTML;
if(nwin != null)
{ nwin.document.write("<html><head><meta http-equiv='Content-Type' content='text/html; charset=utf-8' /></head><body>" content "</body></html>");
nwin.document.close();
}
}
</div>
Теперь я хочу вставить это где-нибудь еще. Это возвращает код JavaScript:
nw = document.getElementById("newwinner");
var g = document.createElement("script");
g.text = nw.innerHTML;
var tab = document.getElementById("Maintable");
tab.insertBefore(g, tab.childNodes[0]);
Я всегда получаю одну и ту же ошибку:
Неперехваченная ошибка синтаксиса: отсутствует ) после списка аргументов
Проблема заключается во втором уровне кавычек, например 'Content-Type'
. Похоже, что одинарные кавычки здесь преобразуются в двойные кавычки. Это то, что я вижу как в консоли Chrome, так и при выполнении alert()
.
Я перепробовал много вариантов, экранируя обратными косыми чертами, используя экранированные двойные кавычки, используя amp;quot;
, но ни один из них не решил проблему. Что я могу сделать, чтобы решить эту проблему?
Обратите внимание, что это специфично для узла скрипта. Когда я использую DIV вместо этого, он работает.
Комментарии:
1. Чего вы хотите достичь своим кодом?
2. Что вы имеете в виду, «Когда я использую DIV вместо этого, он работает». Он не выполняет код, верно? Итак, как это «работает»? Кроме того, почему бы просто не поместить код в
script
элемент в первую очередь?3. В
g.text = nw.innerHTML;
, что такое ‘nw’? Это нигде не объявлено. Кроме того, ‘Maintable’. Кажется, не хватает чего-то, о чем нам, вероятно, нужно знать.4. Итак, я создал jsfiddle с этим кодом в
script
элементе, и ошибок нет… Так почему же вы пытаетесь использоватьdiv
элемент для его хранения, а затем перенести его вscript
элемент? Кроме того, это, вероятно, сработало бы, если бы вы использовалиnw.innerText
илиnw.textContent
.5. Следует отметить, что а) это действительно плохая идея для использования
document.write
и б) в нынешнем виде выdocument.write
создадите полностью недопустимый html, поскольку на результирующей странице даже не будет abody
или ahead
, не говоря уже о корневом элементе или DOCTYPE . Браузер, исправляющий это за вас, не является абсолютно оправданием для выполнения таких действий. Если то, что вам нужно сделать, не может быть достигнуто безопасным и безопасным способом, это означает, что да, вам следует вообще прекратить это делать.