Использование jQuery для отключения всего на странице. Сломай мой код - PullRequest
2 голосов
/ 19 февраля 2011

Для моего текущего проекта мне требуется, чтобы средство было в состоянии удалить все функциональные возможности со страницы, чтобы она была полной и в буквальном смысле статической страницей.Удаление возможности переходить по любым ссылкам, а также отключение и прослушиватели javascript, позволяющие изменять контент на странице.Вот моя попытка на данный момент:

$("*").unbind().attr("href", "#");

Но в поисках идеального сценария, чтобы позволить ему работать в любой ситуации для любой возможной страницы (и с достаточно высокой эффективностью неопределенности на вкладыше).), Я подумал, что проконсультируюсь с экспертами здесь в stackOverflow.

Таким образом, мой вопрос таков: «Можно ли это сделать (и было ли это) в один слой, есть ли что-то, что можно было бы пропустить?».Пожалуйста, разбей это как можно лучше.

Ответы [ 3 ]

3 голосов
/ 19 февраля 2011

Нет.Ничто в этом не останавливает meta перенаправления, или тайм-ауты или интервалы, уже находящиеся в полете, и ничего не делает с тем же источником iframe s (или теми, которые могут стать тем же источником через document.domain), которые могут вернуться на родительскую страницу крединамизировать содержимое.

РЕДАКТИРОВАТЬ: простое число сценариев может быть погружено в воду, чтобы всплыть позже, так что, если вы не контролируете весь код, который может выполняться, прежде чем вы захотите это сделать, я бы сказал,что на практике это невозможно заблокировать, если у вас нет команды, включающей разработчиков браузеров, которые работают над этим в течение некоторого времени.

Другие возможные источники сценариев подводных лодок: XMLHttpRequest s (и их обработчики onreadystatechange), flash-объекты, которые canscript, веб-работники и встраивание кода для запуска в такие вещи, как Object.prototype.toString.

0 голосов
/ 19 февраля 2011

Я не хотел писать длинный комментарий, поэтому я публикую его вместо этого.

Как сказал @Felix Kling, я не думаю, что ваш код удалит атрибуты href для каждого элемента, а скорее удалиткаждый элемент, а затем выберите их атрибуты href.

Возможно, вам нужно написать:

$("*").attr("href", "#").detach() ;

, чтобы удалить атрибуты вместо элементов.

Кроме этого, я сомневаюсь, что вы могли бы удалить обработчики событий водна линия.Во-первых, вам необходимо учитывать регистрацию событий DOM уровня 2 (настраивается только с помощью сценариев) и регистрацию событий DOM уровня 1 (с помощью атрибутов или сценариев).

Насколько мне известно, ваша лучшая ставкаэто сделать поверхностную копию документа с использованием синтаксического анализатора XML и заменить старый документ (который можно сохранить и сохранить в окне).

0 голосов
/ 19 февраля 2011

Первое: Ваш код удалит все со страницы, оставив пустую страницу.Я не вижу, как это сделает страницу "статичной".

$('*').detach();

удалит каждый элемент из DOM.Нечего терять.Так что да, вы удаляете все функциональные возможности, но вы также удаляете весь контент.

Обновление: Даже при изменении с detach на unbind приведенные ниже пункты остаются в силе.

  • Слушатели событий, добавленные в разметку через oneventname="foo()", не будут затронуты.
  • javascript: URL-адреса, например в изображениях, могут по-прежнему запускаться.
  • Событиедобавленные слушатели к window и document сохранятся.

См. DEMO .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...