如何防止 django 管道中 javascript 函数的名称重整
How to prevent name mangling of javascript functions in django-pipeline
我正在使用带有 django-pipeline 的 django 版本 1.82。我按名称调用 html 中的特定 javascript 函数。
<form class="navbar-form navbar-right vcenter"
action="javascript:search();" role="search" id='searchform'>
不幸的是,在压缩的 js 文件中,函数的名称已更改,因此前端功能无法正常工作。如何为该函数保持相同的名称或如何更改对 html?
中 js 函数的引用
我已经安装了 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
您确定 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 的浏览器会得到一个可读的错误页面。
我正在使用带有 django-pipeline 的 django 版本 1.82。我按名称调用 html 中的特定 javascript 函数。
<form class="navbar-form navbar-right vcenter"
action="javascript:search();" role="search" id='searchform'>
不幸的是,在压缩的 js 文件中,函数的名称已更改,因此前端功能无法正常工作。如何为该函数保持相同的名称或如何更改对 html?
中 js 函数的引用我已经安装了 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
您确定 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 的浏览器会得到一个可读的错误页面。