Language/Java Script
JS/브라우저 히스토리 관리 (replaceState, pushState)
건담아빠
2021. 3. 19. 11:51
ajax 등 비동기로 데이터 뿌린 후 history back 등에서 의해서 파라미터를 유지해야할 경우
매번 만들어서 사용하기 귀찮아서 기록해 둔다.
UTIL
/**
* History Object
*/
CORE.HISTORY = {
// history parameter
getFormParams: function (options) {
var sFrmSelector = CORE.nvl2(options['frmSelector'], '');
var aReplaceItems = options['replaceItems'];
var aFrmParams = $(sFrmSelector).serializeArray();
if (sFrmSelector !== '' && Object.keys(aReplaceItems).length > 0) {
aFrmParams.map(function (item) {
Object.keys(aReplaceItems).forEach(function (sId) {
if (item.name == sId) {
item.value = aReplaceItems[sId];
}
});
});
}
return $.param(aFrmParams);
},
// history parameter
getElementParams: function (options) {
var aParams = options['params'];
var aReplaceItems = options['replaceItems'];
if (Object.keys(aReplaceItems).length > 0) {
aParams.map(function (item) {
Object.keys(aReplaceItems).forEach(function (sId) {
if (item.name == sId) {
item.value = aReplaceItems[sId];
}
});
});
}
return decodeURIComponent($.param(aParams));
},
// history replace
replaceState: function (options) {
var oData = CORE.nvl2(options['data'], null);
var sTitle = CORE.nvl2(options['title'], null);
var sUrl = CORE.nvl2(options['url'], window.location.pathname);
var sGetParams = CORE.nvl2(options['params'], '');
sUrl = sUrl + (sGetParams === '' ? '' : '?' + sGetParams);
history.replaceState(oData, sTitle, sUrl);
}
};
사용방법
// 히스토리 파라미터 설정
var sParams = CORE.HISTORY.getFormParams({
'frmSelector': SELLER_LIST.frmSelector,
'replaceItems': {
'seller_no': ''
},
});
// 히스토리 변경
CORE.HISTORY.replaceState({'params': sParams});
pushState로 하는부분은 다른프로젝트에서 사용한거라서 귀찮으니 나중에 정리해야겠다.