Как предотвратить искажение имен функций 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 получает читаемую страницу с ошибкой.