<button data-func="sayHello" data-args='["Alice"]'>Hello</button>
<button data-func="sum" data-args='[3,5]'>Sum</button>
<script>
const allowed = {
sayHello: (name) => alert(`Hello, ${name}!`),
sum: (a, b) => console.log('sum:', a + b),
};
document.addEventListener('click', (e) => {
const el = e.target;
const funcName = el.dataset.func;
if (!funcName) return;
if (!Object.prototype.hasOwnProperty.call(allowed, funcName)) {
console.warn(`허용되지 않은 함수 호출 시도: ${funcName}`);
return;
}
let args = [];
if (el.dataset.args) {
try {
const parsed = JSON.parse(el.dataset.args);
if (Array.isArray(parsed)) args = parsed;
} catch (err) {
console.warn('data-args JSON 파싱 실패:', err);
return;
}
}
try {
allowed[funcName](...args);
} catch (err) {
console.error('함수 실행 중 오류:', err);
}
});
</script>