Ты, конечно, не первый. К сожалению, многие беспроводные интернет-провайдеры используют этот грубый и нежелательный подход к сжатию. Это происходит от Bytemobile .
То, что он делает, это заставляет прокси повторно сжимать все изображения, которые вы выбираете, по умолчанию меньшими (что значительно ухудшает качество изображения). Затем он грубо внедряет скрипт в ваш документ, который добавляет опцию для загрузки подходящего изображения для каждого повторно сжатого изображения. К сожалению, поскольку этот скрипт написан ужасно написанным в стиле 1990-х годов JS, он охватывает все ваше пространство имен, захватывает ваши обработчики событий и имеет большой шанс испортить ваши собственные сценарии.
Я не знаю, как остановить саму инъекцию, кроме использования HTTPS. Но то, что вы можете сделать, это обнаружить или саботировать сценарий. Например, если вы добавляете скрипт ближе к концу документа (между включением скрипта 1.2.3.4 и триггером встроенного скрипта), чтобы нейтрализовать используемый им крючок загрузки:
<script type="text/javascript">
bmi_SafeAddOnload= function() {};
</script>
тогда скрипт не запустится, поэтому ваши события и DOM будут оставлены в покое. С другой стороны, первоначальный сценарий все равно засорил бы ваше пространство имен мусором, и любые проблемы с разметкой, которые он вызывает, все равно будут присутствовать. Кроме того, пользователь будет застревать с перекомпрессированными изображениями, не имея возможности получить оригиналы.
Вы можете попробовать сообщить пользователю:
<script type="text/javascript">
if ('bmi_SafeAddOnload' in window) {
var el= document.createElement('div');
el.style.border= 'dashed red 2px';
el.appendChild(document.createTextNode(
'Warning. Your wireless ISP is using an image recompression system '+
'that will make pictures look worse and which may stop this site '+
'from working. There may be a way for you to disable this feature. '+
'Please see your internet provider account settings, or try '+
'using the HTTPS version of this site.'
));
document.body.insertBefore(el, document.body.firstChild);
}
</script>