Задать вопрос
@lolrofl01

Откуда берется inject кода в мазиле и хроме при вычищенном кешировании?

Добрый день.
Попался мне этакий SPA, где страницы открываются без перезагрузки посредством ajax запросов. То есть, отслеживаются нажатия на любые ссылки, если это страница, на сервере ее html рендерится, вытаскиваются ее скрипты и стили, потом js вставляет вместо текущей страницы новый html, приправляя скриптами и стилями. Получилась загрузка страницы без перезагрузок. Работает все хорошо, но есть одна жалоба. Почему-то иногда на некоторых страницах, где свои скрипты, эти самые скрипты не работают. То работают, то нет. Чтобы заработали, надо перезагрузить страницу, тогда работают всегда.

Полез в консоль и увидел, что иногда возникает ошибка редекларирования переменных. Именно в этих случаях скрипты на странице перестают работать. Прошерстив js я понял, что редекларирования нет. Оно может появиться, только если один и тот же js файл дважды подключить. Полез следить за сетью и действительно, иногда при загрузке очередной страницы, ее js файл грузится дважды и вылезает ошибка. К слову, html тоже дважды грузится. И стили дважды.

Логично предположить, что ajax запрос отрабатывает дважды, вместо одного раза. Сделал самопальный блок. Выглядит так:
//До Ajax:
let blockAjaxRequest = 0;

//Нажатие на ссылку

console.log('Pressed to link at ' + currentDate.getTime());

    if( blockAjaxRequest === 1 ) {
        console.log('BLOCKED!');
        return false;
    }

    blockAjaxRequest = 1; }

ajax{
//параметры...., 

success: function (res) {
blockAjaxRequest = 0;
}
}


То есть, до аякса мы задаем блокировку = 0. Во время нажатия на ссылку вставляем текущее время (чтобы отследить значения, вдруг с разницей в долю секунды отправляются), ну и в самом аяксе до отправки ставится значение 1, при котором еще раз отправить запрос уже нельзя. А после выполнения запроса обратно меняется на 0, т.е. можно еще один запрос отправить.

Защита не сработала, все тоже самое. Решил еще поглядеть в консоль и увидел такое. Предыдущий разраб на месте аякс запроса добавил console.log('AJAX!!!!!'). Я первым делом эту надпись снес, добавил вместо нее текущую дату. Но запись эта все равно появляется. Такое ощущение, что старый js файл, который я удалил и заменил на новый, грузится вместе с новым, хотя физически его быть нигде не может. Сначала кеш чистил комбинацией клавиш ctrl + f5, но это не помогло. Затем в мазиле для этой страницы удалил все данные и куки, а в хроме вообще всю историю и весь кеш какие были. И знаете что, надпись все равно вставляется откуда-то. Выглядит это так:

681214ed567f4073622558.png
681214f3db00a156790041.png

И откуда это берется? Тот же хром ссылается на какой-то "(индекс)", где реально лежит старый код.
6812152f52d42416254474.png

Этого кода нет нигде. Файл я удалил, его даже под другим названием нет на сервере. В браузере кеш, куки и всю историю вычистил. Откуда это берется?
  • Вопрос задан
  • 58 просмотров
Подписаться 1 Средний 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
@rPman
Открой в консоли разработчика закладку - сеть (network), обнови страницу, и сделай тут же поиск по содержимому AJAX!!!!! (нужно в строке Поиск справа нажать на лупу, откроется еще одна строка поиска ниже уже по содержимому), так ты найдешь по какой ссылке грузится этот код.

Ты можешь открыть закешированную ссылку как основная ссылка и уже на нем нажать ctrl+f5 тогда она перегрузится принудительно.

Так же в настройках браузера есть возможность удалить кеш и все связанное с конкретным сайтом.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы