Запретить использование JavaScript внутри Fancybox

Большинство результатов поиска «запретить JavaScript внутри Fancybox» приводит к жалобам людей на то, что доступ к функциям JavaScript в Fancybox ограничен. Моя проблема как раз в обратном.

Моя программа сохраняет страницы из Интернета для последующего отображения (это для контента, который в противном случае менялся бы со временем — подумайте о новостях без постоянных ссылок). Затем пользователь может выполнять поиск в содержании этих историй по определенным ключевым словам (сейчас я выполняю полнотекстовый поиск по содержимому, лишенному html, с помощью SQLite FTS). Если есть совпадение, отображается фрагмент и предоставляется ссылка, позволяющая просмотреть сохраненную историю во всплывающем окне Fancybox.

Проблема в том, что когда сохраненная история извлекается из базы данных и просматривается через ajax в Fancybox, ее встроенный JavaScript пытается вмешаться, возможно, изменить размер страницы или попытаться открыть всплывающие окна и т. д.

Два вопроса. Во-первых, могу ли я предотвратить запуск любого JavaScript в окне Fancybox? Во-вторых, есть ли лучший, более элегантный способ сделать это? Одним из способов может быть преобразование веб-страницы в PDF-файл, а затем сохранение этого PDF-файла. Но это сложнее, и это сломало бы длинные истории. Мы хотим иметь возможность просматривать историческую историю, даже если она не соответствует оригиналу с точки зрения внешнего вида.


person punkish    schedule 26.05.2011    source источник


Ответы (2)


Вы можете начать с удаления <script> тегов (конечно, на сервере).

person Matt Ball    schedule 26.05.2011

Отображать содержимое в <iframe>, желательно из другого домена, чтобы браузер применял политики безопасности того же происхождения. Сценарии на странице по-прежнему будут работать (что может быть хорошо, возможно, некоторые из этих страниц полагаются на сценарии для некоторых своих функций), но ваша содержащая страница будет защищена от любого вмешательства со стороны этих сценариев.

$.fancybox({
    href: '//content.example.com/id/nnnnn/',
    type: 'iframe'
});
person josh3736    schedule 26.05.2011