์ต์ํ์ ์ฌํ: https://gist.github.com/DanielDignam/b49084941a2f731501d5
Windows 10์์ ๋ ธ๋ 4.1.1, Chrome 45.0.2454.85 ๋ฐ Electron 0.35.2๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
์ฒจ๋ถ๋ ์ฑ์ ์คํํฉ๋๋ค. ^Z๋ ์ฝ์์ ์ฌ๋ฐ๋ฅด๊ฒ ๋ณด๊ณ ํฉ๋๋ค. ์ ๋ ฅ ์์์ ๋ฌด์ธ๊ฐ๋ฅผ ์ ๋ ฅํ๊ณ ๋ฒํผ์ ๋๋ฌ DOM์์ ์์๋ฅผ ์ ๊ฑฐํฉ๋๋ค. ^Z๋ฅผ ๋๋ฅด๋ฉด ๋ณด๊ณ ๋์ง ์์ต๋๋ค. ^Z๋ฅผ ๋ค์ ๋๋ฅด๊ณ ํ์ธํ์ญ์์ค.
๋ค์ ์คํํ์ฌ ํ ์คํธ ์์์ N ๋ฒ ๋ถ์ฌ๋ฃ์ผ๋ฉด ๋ณด๊ณ ๋๊ธฐ ์ ์ ^Z์ ์๊ฐ N+1์ด๋ผ๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
์ด๋ ์ ๋ ฅ ์์๊ฐ ๋ ์ด์ DOM์ ์๋๋ผ๋ ์ฌ์ ํ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๊ณ ์์ผ๋ฉฐ Undo ์คํ์ ๋น์ธ ๋๊น์ง ^Z๋ฅผ ์ ๋ฌํ์ง ์๋๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์ด๊ฒ์ ์ ๋ ฅ ํ๋๊ฐ ์ฌ์ฉ๋ ๋ค์ DOM์์ ์ ๊ฑฐ๋ ๊ฒฝ์ฐ ์์ฉ ํ๋ก๊ทธ๋จ ์คํ ์ทจ์ ์์ ์ด ^Z์์ ๋ณต์๋์ง ์๋ ์์ฉ ํ๋ก๊ทธ๋จ์์ ์คํ ์ทจ์๋ฅผ ์ค๋จํฉ๋๋ค.
์์/์ ๋ ฅ์ด ์์ ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค๋ฅธ ์ํ๋ฅผ ์ทจ์ํ๊ณ ์ถ์ต๋๋ค.
<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
</head>
<body id='body'>
<h1>Hello World!</h1>
We are using node <script>document.write(process.versions.node)</script>,
Chrome <script>document.write(process.versions.chrome)</script>,
and Electron <script>document.write(process.versions.electron)</script>.
<script>
function removeInput(event) {
var i = document.getElementById("foo");
var b = document.getElementById("body");
b.removeChild(i);
}
const remote = require('electron').remote;
const Menu = remote.Menu;
const MenuItem = remote.MenuItem;
var template = [
{
label: 'Edit',
submenu: [
{
label: 'Undo',
accelerator: 'CmdOrCtrl+Z',
click: function () {
console.log('Undo called');
},
enabled: true
}
]
}];
menu = Menu.buildFromTemplate(template);
Menu.setApplicationMenu(menu);
</script>
<input id='foo' type='text'/>
<input type='button' onclick='removeInput()'/>
</body>
</html>
์ด๊ฒ์ DOM ์ ๋ ฅ์ ์ฒ๋ฆฌํ ๋ Chromium์ ๋ฒ๊ทธ์ ๋๋ค. ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ฉ๋ด์ ๊ฐ์๊ธฐ์ ์์กดํ๋ ๋์ DOM ์ด๋ฒคํธ๋ก ์ ๋ ฅ์ ์๋์ผ๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด Chromium์ ์์ค ์ฝ๋๋ฅผ ํํค์ณ์ผ ํ์ง๋ง ๋๋ฌด ๋ง์ ์์ ์ ๋๋ค. Chromium์ ๋ณด๊ณ ํ๋ ๊ฒ๋ ์๋ํ์ง ์์ ๊ฒ์ ๋๋ค. ์๋ํ๋ฉด ์ฌ์์ฐํ๋ ค๋ฉด ์ฌ์ฉ์ ์ ์ ๋ฉ๋ด ํญ๋ชฉ์ Chrome์ ์ถ๊ฐํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด๋ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
์๋ง ์๋ฌด๋ ์กฐ์ฌํ์ง ์์ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์์ ๋์ง ์์ ๊ฒ์ด๋ฉฐ DOM์ ์ฃผ์ ์ด๋ฒคํธ๋ฅผ ์์ ํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ผ๋ฏ๋ก ๋ซ์ต๋๋ค.
๋์ฒ๋ผ ์ด ๋ฌธ์ ๋ฅผ ์ฐ์ฐํ ๋ฐ๊ฒฌํ ์ฌ๋๋ค์ ์ํด: ์ฌ๊ธฐ ์ Chromium ๋ฒ๊ทธ ์ถ์ ๊ธฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ด ๋ฌธ์ ๋ ์์ฑ ๋น์์๋ ์ฌ์ ํ ์์ ๋์ง ์์์ต๋๋ค.
๊ฐ์๊ธฐ ์์ด ๋ฉ๋ด ํญ๋ชฉ์ ๋ง๋ค๊ณ ๋ ๋๋ฌ์์ Ctrl+Z ํค ์ด๋ฒคํธ๋ฅผ ์์ ํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์์ต๋๋ค. ์ด๊ฒ์ ์๋ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด์ ๋ฉ๋ด์ "์คํ ์ทจ์" ์์ "Ctrl+Z" ๋จ์ถํค๋ฅผ ํ์ํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํฉ๋๊น?