Подтвердить что ты не робот

Перезагрузка файлов JavaScript без обновления HTML

У меня есть HTML, который загружает несколько файлов Javascript:

<script src="assets/js/a.js"></script>
<script src="assets/js/b.js"></script>
<script src="assets/js/jquery.min.js"></script>

Как я отлаживаю/тестирую свои Javascripts в консоли браузера, можно ли перезагрузить эти файлы Javascript без необходимости перезагрузки всей HTML-страницы?

4b9b3361

Ответ 1

Вы можете удалить и снова добавить их:

$('script').each(function() {
    if ($(this).attr('src') !== 'assets/js/jquery.min.js') {
        var old_src = $(this).attr('src');
        $(this).attr('src', '');
        setTimeout(function(){ $(this).attr('src', old_src + '?'+new Date()); }, 250);
    }
});

Ответ 2

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

https://superuser.com/questions/36106/force-refreshing-only-javascript-files-in-firefox-and-chrome

Ответ 3

Протестировано с помощью jQuery 2.0.3 и chrome 43

 function reloadScript(id) {

    var $el =  $('#' + id);

    $('#' + id).replaceWith('<script id="' + id + '" src="' + $el.prop('src') + '"><\/script>');
}

Chrome жалуется, но работает:

Синхронный XMLHttpRequest в основном потоке устарел из-за его пагубных последствий для конечного пользователя. Для получения дополнительной справки проверьте http://xhr.spec.whatwg.org/.

Тег script должен иметь идентификатор. Вызовите консоль:

reloadScript('yourid');

Не удаляет прослушиватели событий, так что, например, нажатие кнопки запускается дважды, если перезагружается.

Ответ 4

На основе решения PitaJ.

Перезагрузите все javascript в функции. Вы можете позвонить по этому адресу в любом месте.

 $('script').each(function () {
        if ($(this).attr('src') != undefined && $(this).attr('src').lastIndexOf('jquery') == -1) {
            var old_src = $(this).attr('src');
            var that = $(this);
            $(this).attr('src', '');

            setTimeout(function () {
                that.attr('src', old_src + '?' + new Date().getTime());
            }, 250);
        }
    });