Могу ли я предотвратить загрузку файла JavaScript? - PullRequest
0 голосов
/ 08 сентября 2010

Почему я хочу заблокировать загрузку файла JS в HTML?Что ж, это мой график загрузки страницы:

  1. загружен jQuery (1.2)
  2. загружен плагин jQuery (расширяет текущий объект jQuery)
  3. customJS загружен
  4. пользовательский JS использует document.write для добавления дополнительных сценариев
  5. добавленный дополнительный сценарий загружает новый jQuery (1.4, но это не имеет значения)
  6. ->поэтому мое расширение исчезло, так как это новый объект jQuery

Что я не могу сделать, это поставить (5) или (3) перед (2).Я работаю с Drupal (PHP Framework), и это дополнительные модули.Я также не могу разобрать добавленный скрипт в точке (3), потому что он использует document.write.

Так что я подумал, что, возможно, я могу отказать в загрузке второго скрипта jQuery.В настоящее время у меня нет другой идеи.Но это может быть невозможно.Что ты думаешь?

Ответы [ 3 ]

1 голос
/ 08 сентября 2010

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

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

0 голосов
/ 09 сентября 2010

Итак, вот что я придумала:

Вместо того, чтобы предотвращать этот JS, я могу поместить его в iframe - это превращает его в среду песочницы, чтобы она больше ничего не могла навредить. Вот ты где: Сначала нужно проанализировать внешний скрипт, потому что я передаю его в виде строки:

function parse_str_to_js($txt) {
  $txt = str_replace('\\', '\\\\', $txt);
  $txt = str_replace('"', '\\"', $txt);
  $txt = str_replace("\r\n", '\n', $txt);
  $txt = str_replace("\n", '\n', $txt);
  $txt = str_replace('<', '\u003C', $txt);
  $txt = str_replace('>', '\u003E', $txt);
  return $txt;
}

Тогда в HTML вместо:

<php echo $advertisement_script; ?> 

следует заменить на заполнитель:

<div id="advertisement"></div>

А в JavaScript будет создан iframe:

$(function(){
  $('#advertisement').html('<iframe id="iframe_advertisement"/>');
  var advertisement = "<?php echo parse_str_to_js($advertisement); ?>";
  document.getElementById('iframe_advertisement').contentWindow.document.write(advertisement);
});
0 голосов
/ 08 сентября 2010

Что я могу сделать, это снова загрузить расширение jQuery (2) после (6). Это работает, но это не приятно.

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