태풍 대비 행동 요령 — 태풍이 오기 전·중·후 세 단계로 나누어 기억하는 것이 가장 확실합니다(7월 12일 행정안전부 국민재난안전포털 공식 기준). […]
위로 스크롤
/* ============================================================
공통 검색창 개선 스크립트 v1.0.0 (2026-07-27)
대상: Astra 테마를 쓰는 스마트 정보센터 계열 블로그 ★ 전부
★ 사이트마다 고칠 값이 하나도 없다. 그대로 붙여넣으면 된다.
도메인·글 제목·카테고리 이름이 이 파일에 들어 있지 않다.
넣는 곳: WPCode → Add Snippet → Add Your Custom Code
→ 종류 JavaScript Snippet
→ 위치 Site Wide Footer
→ 저장 후 Active 로 켜기
하는 일
① 확대경을 눌러 검색창을 열 때마다 ★ 이전 글씨를 지운다
② 지운 뒤 ★ 커서를 자동으로 놓아 바로 타자를 칠 수 있게 한다
③ 브라우저 자동완성(예전 검색어가 아래로 딸려 나오는 목록)을 끈다
④ 뒤로 가기로 돌아와도 글씨가 되살아나지 않게 한다
⑤ Esc 키를 누르면 즉시 비운다
안 하는 일 (일부러 안 한다)
· 검색 결과 화면에서는 지우지 않는다 — 무엇을 찾았는지 보여야 하기 때문이다
· 글 하단 검색 패널의 카테고리 선택은 건드리지 않는다
· 검색을 보내는 동작 자체는 손대지 않는다
★ 게시글 수와는 무관하다. 글이 65편이든 650편이든 동작은 같다.
============================================================ */
(function () {
'use strict';
/* 두 번 넣어도 한 번만 돈다 */
if (window.__SL_SEARCH_FIX__) { return; }
window.__SL_SEARCH_FIX__ = '1.0.0';
/* 검색 입력칸을 찾는 조건 — 테마가 바뀌어도 걸리도록 넓게 잡는다 */
var SEARCH_INPUT = [
'input[type="search"]',
'input[name="s"]',
'.search-field',
'form[role="search"] input[type="text"]'
].join(',');
/* 검색창을 여는 단추(확대경 등) */
var OPENERS = [
'.astra-search-icon',
'.ast-search-menu-icon',
'.slide-search',
'a[href="#ast-search"]',
'[class*="search-icon"]',
'[class*="search-toggle"]',
'[class*="search-open"]'
].join(',');
function all(sel, root) {
try { return (root || document).querySelectorAll(sel); }
catch (e) { return []; }
}
/* 검색 결과 화면인가 — 여기서는 글씨를 지우지 않는다 */
function isResultPage() {
try {
if (document.body && document.body.className.indexOf('search') >= 0) return true;
if (String(location.search).indexOf('s=') >= 0) return true;
} catch (e) { }
return false;
}
/* 입력칸 하나를 손봐 둔다 (자동완성 끄기 + Esc 로 비우기) */
function harden(el) {
if (!el || el.getAttribute('data-sl-search') === '1') return;
el.setAttribute('data-sl-search', '1');
el.setAttribute('autocomplete', 'off');
el.setAttribute('autocorrect', 'off');
el.setAttribute('autocapitalize', 'off');
el.setAttribute('spellcheck', 'false');
el.addEventListener('keydown', function (ev) {
if (ev.key === 'Escape' || ev.keyCode === 27) { el.value = ''; }
});
}
function hardenAll() {
var list = all(SEARCH_INPUT);
for (var i = 0; i < list.length; i++) { harden(list[i]); }
}
function clearAll() {
var list = all(SEARCH_INPUT);
for (var i = 0; i < list.length; i++) {
harden(list[i]);
list[i].value = '';
}
}
/* 화면에 실제로 보이는 첫 입력칸을 비우고 커서를 놓는다 */
function clearAndFocus() {
var list = all(SEARCH_INPUT);
for (var i = 0; i < list.length; i++) {
var el = list[i];
var box;
try { box = el.getBoundingClientRect(); } catch (e) { continue; }
if (box.width > 0 && box.height > 0) {
el.value = '';
try { el.focus(); } catch (e) { }
return true;
}
}
return false;
}
/* 팝업이 열리는 데 시간이 걸리므로 여러 번 시도한다 */
function clearAndFocusSoon() {
clearAll();
var waits = [0, 60, 150, 300, 600];
for (var i = 0; i < waits.length; i++) {
(function (ms) {
setTimeout(function () { clearAndFocus(); }, ms);
})(waits[i]);
}
}
/* 확대경을 눌렀을 때 */
document.addEventListener('click', function (ev) {
var t = ev.target;
if (!t || !t.closest) return;
var opener;
try { opener = t.closest(OPENERS); } catch (e) { return; }
if (opener) { clearAndFocusSoon(); }
}, true);
/* 키보드로 열었을 때도 같게 */
document.addEventListener('keyup', function (ev) {
if (ev.key !== 'Enter' && ev.keyCode !== 13) return;
var t = document.activeElement;
if (!t || !t.closest) return;
var opener;
try { opener = t.closest(OPENERS); } catch (e) { return; }
if (opener) { clearAndFocusSoon(); }
}, true);
/* 화면이 처음 뜰 때 */
function onReady() {
hardenAll();
if (!isResultPage()) { clearAll(); }
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', onReady);
} else {
onReady();
}
/* 뒤로 가기로 돌아왔을 때 — 브라우저가 글씨를 되살리는 것을 막는다 */
window.addEventListener('pageshow', function () {
setTimeout(function () {
hardenAll();
if (!isResultPage()) { clearAll(); }
}, 0);
});
/* 나중에 만들어지는 검색창(팝업 안의 것)도 놓치지 않는다 */
try {
if (window.MutationObserver && document.body) {
new MutationObserver(function () { hardenAll(); })
.observe(document.body, { childList: true, subtree: true });
}
} catch (e) { }
})();