Как я могу предотвратить отображение в iframe электронного письма для загрузки изображений и других трекеров электронной почты? - PullRequest
0 голосов
/ 19 января 2020

У нас есть веб-панель администратора, в которой агенты могут видеть разговоры с клиентами.

Эти беседы являются результатом импорта обычных сообщений электронной почты через соединение IMAP. Мы берем «нетронутые» файлы почтовых ящиков и храним их в базе данных. Затем мы постобработаем файлы для индексации с помощью «с», «по», «по дате» и т. Д. И т. Д. Мы можем искать все электронные письма, связанные с клиентом, и отображать их по своему желанию.

Затем, когда агент ищет клиента в веб-панели администратора и открывает его, появляется полный разговор по электронной почте. И мы показываем HTML версию электронного письма в iframe (или текстовую версию, если html версия отсутствует). 90% клиентов отправляют HTML.

Что происходит? После того, как агент откроет письмо на нашем веб-сайте, iframe загрузит «full html» и отобразит его. Это позволяет загружать «удаленную загрузку» (изображения, звуки, стили, если таковые имеются, и все такое). Это позволяет клиентам «отслеживать», открыли ли мы электронную почту, добавив идентификаторы отслеживания к активам (обычно http://track.example.com/image.jpg?id=123456789)

Я пробовал атрибут «песочница» iframe html тег без удачи (он все еще загружает изображения).

Вопрос

Как программно указать iframe не загружать ЛЮБОЙ удаленный контент и просто визуализировать HTML без какого-либо удаленного вызова?

1 Ответ

1 голос
/ 19 января 2020

Документация iframe Mozilla, в которой перечислены все доступные атрибуты для: здесь: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe

Если вы посмотрите на «песочницу», то нет никаких ограничений, определяющих c для изображений или других включений. , только ограничения на такие вещи, как запуск JavaScript. Других атрибутов, ограничивающих изображения и включения, нет.

Чтобы решить проблему изображений и включений в HTML, вам необходимо отфильтровать HTML на сервере перед его отправкой или в клиент после его прибытия.

Сервер:

  • Перед сохранением его в базе данных.
  • В коде, который извлекает HTML и возвращает его в iframe .

Клиент:

  • Используйте AJAX для заполнения фрейма HTML кодом, который фильтрует ответ. При таком подходе вы также можете использовать div вместо iframe, если это лучше работает для вашего макета.
  • Если все ваши пользователи будут использовать Chrome или Firefox, вы можете посмотреть на написание расширения для браузера
...