Копирование скрипта с помощью innerHTML и кавычек

#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]);

 

Я всегда получаю одну и ту же ошибку:

Неперехваченная ошибка синтаксиса: отсутствует ) после списка аргументов

Вот как это выглядит в Chrome

Проблема заключается во втором уровне кавычек, например '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, поскольку на результирующей странице даже не будет a body или a head , не говоря уже о корневом элементе или DOCTYPE . Браузер, исправляющий это за вас, не является абсолютно оправданием для выполнения таких действий. Если то, что вам нужно сделать, не может быть достигнуто безопасным и безопасным способом, это означает, что да, вам следует вообще прекратить это делать.