Я написал код, который берет строку html и очищает ее от уродливого HTML с помощью jQuery (см. Ранний прототип в this SO вопрос ). Он работает довольно хорошо, но я наткнулся на проблему:
При использовании. append (), чтобы обернуть html в div, все элементы сценария в коде оцениваются и запускаются (см. этот ответ SO для объяснения, почему это происходит). Я не хочу этого, я просто хочу, чтобы они были удалены, но я могу справиться с этим позже, пока они не будут запущены.
Я использую этот код:
var wrapper = $('').append($(html));
Я пытался сделать это таким образом вместо этого:
var wrapper = $('' + html + '');
Но это просто вызывает ошибку «Доступ запрещен» в IE, которую исправляет функция append () (см. ответ, на который я ссылался выше).
Я думаю, что смогу переписать свой код, чтобы он не требовал оболочку вокруг html, но я не уверен, и я хотел бы знать, можно ли добавить html без запуска в нем скриптов.
Как мне обернуть кусок неизвестный HTML все элементы сценария в коде оцениваются и запускаются (см. этот ответ SO для объяснения, почему это происходит). Я не хочу этого, я просто хочу, чтобы они были удалены, но я могу справиться с этим позже, пока они не будут запущены.
Я использую этот код:
var wrapper = $('').append($(html));
Я пытался сделать это таким образом вместо этого:
var wrapper = $('' + html + '');
Но это просто вызывает ошибку «Доступ запрещен» в IE, которую исправляет функция append () (см. ответ, на который я ссылался выше).
Я думаю, что смогу переписать свой код, чтобы он не требовал оболочку вокруг html, но я не уверен, и я хотел бы знать, можно ли добавить html без запуска в нем скриптов.
Как мне обернуть кусок неизвестный HTML все элементы сценария в коде оцениваются и запускаются (см. этот ответ SO для объяснения, почему это происходит). Я не хочу этого, я просто хочу, чтобы они были удалены, но я могу справиться с этим позже, пока они не будут запущены.
Я использую этот код:
var wrapper = $('').append($(html));
Я пытался сделать это таким образом вместо этого:
var wrapper = $('' + html + '');
Но это просто вызывает ошибку «Доступ запрещен» в IE, которую исправляет функция append () (см. ответ, на который я ссылался выше).
Я думаю, что смогу переписать свой код, чтобы он не требовал оболочку вокруг html, но я не уверен, и я хотел бы знать, можно ли добавить html без запуска в нем скриптов.
Как мне обернуть кусок неизвестный HTML без запуска скриптов внутри него, желательно удалить их совсем?
Следует ли мне выбросить jQuery в окно и сделайте это с помощью простого JavaScript и Вместо этого манипуляции с DOM? Может ли это помочь?
Я не пытаюсь установить какой-то уровень безопасности на стороне клиента. Я прекрасно понимаю, что это было бы бессмысленно.
Джеймс предложил мне отфильтровать элементы сценария, но посмотрите на эти два примера (первый оригинал и предложение Джеймса):
jQuery("").append("
hellothere")
сохраняет текстовые узлы, но записывает gnu!
jQuery("").append(jQuery("
hellothere").not('script'))`
Не записывает gnu !, но также теряет текстовые узлы.
Джеймс обновил свой ответ, и я его принял. См. Мой последний комментарий к его ответу.