Как предотвратить искажение имен функций javascript в django-pipe

Я использую django версию 1.82 с django-pipe. Я вызываю конкретную функцию JavaScript из HTML по имени.

 <form class="navbar-form navbar-right vcenter" 
 action="javascript:search();" role="search" id='searchform'>

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

Я установил yuglify и настройки, которые я использую

PIPELINE_CSS = {
'allstyles': {
    'source_filenames': (
      'css/application.css',
      'feedback/css/feedback-form.css',
    ),
    'output_filename': 'css/nifty.css',
    'extra_context': {
        'media': 'screen,projection',
    },
},
}

PIPELINE_JS = {
'actions': {
    'source_filenames': (
      'js/nifty.js',
      'feedback/js/feedback-form.js',
    ),
    'output_filename': 'js/nifty.js',
}
}
STATICFILES_STORAGE = 'pipeline.storage.PipelineStorage'
PIPELINE_JS_COMPRESSOR = 'pipeline.compressors.yuglify.YuglifyCompressor'
PIPELINE_DISABLE_WRAPPER = True
PIPELINE_ENABLED=True 

2 ответа

Решение

Вы уверены, что search() такое глобальная функция? Чтобы убедиться, что вы можете назначить его window переменная:

window.search = function() {
    ...
}

Я бы сделал это наоборот.

<form ... action="/nojs.html" ... id='searchform'>

а затем перехватить submit событие в форме.

(function(){
    var sf = document.getElementById('searchform');
    sf.addEventListener('submit', function(ev){
        ev.preventDefault();
        // do here whatever "search()" needs to do
    });
})();

Таким образом, вам не нужно ничего добавлять в window пространства имен, не зависят от минимизированных имен функций, и браузер с отключенным JS получает читаемую страницу с ошибкой.

Другие вопросы по тегам