Я хочу отключить теги <script>
. Здесь мой код, но он не работает.
document.getElementsByTagName('script').disabled = true;
Я хочу отключить теги <script>
. Здесь мой код, но он не работает.
document.getElementsByTagName('script').disabled = true;
Невозможно выполнить... Тег script оценивает, как только визуализатор DOM визуализирует его, поэтому получение дескриптора на нем после того, как палаты не будут делать много.
Фактически, можно отключить выполнение, изменив атрибут type:
<script type="text/javascript">
alert("I will alert you");
</script>
<script type="application/json">
alert("And I will keep silent");
</script>
<script>
alert("I will alert too");
</script>
Извините, но вы не можете отключить элемент <script>
.
Как я понимаю, вы получаете код HTML из базы данных и добавляете его на страницу. Если это так, вы можете написать функцию Server Side, которая добавит заметки HTML вокруг скриптов с помощью простого Regex, и после этого пользователь сохранит изменения, необходимые для удаления заметок.
Вы можете сделать это также в Javascript, если у вас есть HTML-строка, которую вы хотите добавить, прежде чем добавлять ее в Dom.
Удаление всех событий на узлах DOM предотвратит выполнение большинства JavaScript (здесь для document
):
for (key in getEventListeners(document)) {
getEventListeners(document)[key].forEach(function(c) {
c.remove()
})
}
Вы можете отключить элемент скрипта. Есть несколько способов:
Вы можете указать другой тип сценария, который указан в списке других. Вот тот, который работал для меня:
//loop through all script tags on page
$('script').each(function(){
var scripthtml = $(this).html();
$(this).replaceWith('<script type="text/gzip">' + scripthtml + '</script>');
});
Все официальные типы сценариев можно найти здесь: iana.org
Второй способ - просто простое утверждение if:
//loop through all script tags on page
$('script').each(function(){
var scripthtml = $(this).html();
$(this).replaceWith('<script>if (1==0){' + scripthtml + '}</script>');
});
Оператор if всегда будет ложным, поэтому все, что находится внутри тега script, не будет выполнено. Однако все ваши функции() внутри тега script будут действительны.
Вот javascript-эквивалент replaceWith:
//get script and html
var yourscripttag = document.getElementById('yourscripttagID');
var scripthtml = 'if (1==0){' + yourscripttag.innerHTML + '}';
//remove script
yourscripttag.remove();
//create new script element
var newscript=document.createElement('script');
newscript.type='text/javascript';
//insert html in new script tag
newscript.appendChild(document.createTextNode(scripthtml));
//insert new script tag into head
document.getElementsByTagName('head').item(0).appendChild(newscript);