Ответ 1
Это не добавление JavaScript в существующий элемент script, он создает новый элемент script и добавляет его в документ.
Это работает в современных браузерах, но вы обычно этого не делали, если бы у вас не было кода в переменной, которую вам действительно нужно было выполнять в глобальном контексте (поэтому вы не могли использовать new Function()
или eval
изнутри функции).
Какой прецедент? Вам действительно нужно это делать?
Если вы попытались изменить содержимое script, написав текстовое содержимое <script>
, которое уже было в документе, это не приведет к запуску нового содержимого script, оно просто изменится содержимое DOM. Точные обстоятельства того, что приводит к запуску нового script при использовании элемента <script>
, варьируются от браузера к браузеру (хотя HTML5 пытается стандартизировать его); на данный момент лучше не делать ничего, кроме простого создания и добавления нового script. (И даже лучше избегать сценариев <script>
вообще, если это возможно.)
Настройка innerHTML
будет работать; Однако метод RoToRa с createTextNode
лучше. Для <script>
в документе старой школы-HTML innerHTML
будет делать то же самое, что и createTextNode
, так как <script>
- это элемент CDATA, который не может содержать разметку. Это было бы важно для XHTML-служил-как-XML, хотя, и в целом, это чище, чтобы избежать innerHTML
и его проблем с экранированием, когда вы просто хотите установить простой текст.
Кроме того, вы можете использовать [0]
вместо item(0)
(это определяется как часть привязок DOM JavaScript), и вы должны избегать getAttribute
/setAttribute
; вместо этого используйте свойства HTML DOM, такие как se.type=...
, которые более читабельны и менее ошибочны в IE (хотя ошибки IE не повлияют на вас для атрибута type
).