в $.html() $.load() какова спецификация?

#javascript #jquery #security

#javascript #jquery #Безопасность

Вопрос:

Похоже, что jQuery не документирует, как он ведет себя при использовании $.html() или $.load() для вставки фрагмента HTML-документа в текущий DOM:

Что это делает с < script > тегами?

Тем не менее, они выполняются. Но нигде не найдены в DOM. Кажется, jQuery на мгновение вставляет блоки скрипта в DOM или оценивает его.

Документации на этот счет нет. Знаете ли вы какой-нибудь способ настроить его, т. Е. отключить? Это имеет последствия для безопасности по своей природе!

Комментарии:

1. Можете ли вы опубликовать, какой код вы используете?

Ответ №1:

<script> Теги удаляются из кода и явно выполняются после обновления DOM.

Если вы используете «$.load()» с URL-адресом, в котором есть селектор (это взломанная функция API), вот так:

 $.load("http://something #stuff", ... )
  

тогда он не будет запускать скрипты.

Комментарии:

1. Я вижу это поведение. Но есть ли какая-либо документация на этот счет? Существует ли «официальный» переключатель?

2. Насколько я знаю, ничего подобного, вот почему я зарегистрировал ошибку по этому поводу .

3. Следствием такого поведения является то, что если у вас есть <script> -ы, которые используют document.write и вы вставляете такой HTML с помощью jQuery, он внезапно заменит всю страницу выводом document.write -ов. Это потому, что скрипт выполняется, когда весь документ уже готов. Если вы вставляете страницы на другие страницы с помощью AJAX, это может вызвать некоторые неприятные сюрпризы … вещи, которые отлично работают при прямом посещении, уничтожат страницу при вставке с помощью AJAX.