์๋
,
will-navigate ์ด๋ฒคํธ(https://github.com/atom/electron/blob/master/docs/api/web-view-tag.md) ๋ฌธ์์์ ๋ค์ ๋ฌธ์ฅ์ ์ดํด๋ณด์์ต๋๋ค.
event.preventDefault()๋ฅผ ํธ์ถํด๋ ์๋ฌด๋ฐ ํจ๊ณผ๊ฐ ์์ต๋๋ค.
๊ทธ๋ ๋ค๋ฉด webview๊ฐ ๋ค๋ฅธ ํ์ด์ง๋ก ์ด๋ํ๋ ๊ฒ์ ์ด๋ป๊ฒ ๋ฐฉ์งํ ์ ์์ต๋๊น? ์ฌ์ฉ์๊ฐ webview์์ URL ๋งํฌ๋ฅผ ํด๋ฆญํ ๋ ๊ธฐ๋ณธ ๋ธ๋ผ์ฐ์ ๋ฅผ ์์ํ๋ ค๊ณ ํฉ๋๋ค.
๋ค์์ ๋ ๋๋ฌ ํ๋ก์ธ์ค์ ๋ํ ๋ด ์ฝ๋์
๋๋ค.
webview.addEventListener('will-navigate', function(e) {
e.preventDefault();
require('electron').shell.openExternal(e.url);
});
์ด ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ฉด webview์์ URL ๋งํฌ๋ฅผ ํด๋ฆญํ๋ฉด webview๊ฐ ์ ํ์ด์ง๋ก ์ด๋ํ๊ณ ์ ํ์ด์ง๋ฅผ ํ์ํ๋ ๊ธฐ๋ณธ ๋ธ๋ผ์ฐ์ ๋ ์ด๋ฆฝ๋๋ค. webview๊ฐ ์ ํ์ด์ง ํ์์ ์ค์งํ๊ธฐ๋ฅผ ์ํฉ๋๋ค.
#1378์ ๋ณต์ ํ์ ๋๋ค.
๊ฒ์๋ ์๋ฃจ์ ์ด ๋ณด์ด์ง ์์ต๋๊น?
์ด๊ฒ์ ์ฌ์ฉ์๊ฐ ๋งํฌ๋ฅผ ํด๋ฆญํ๊ณ ์์ฒญ๋ URL์ ๋ํด ์ฑ์ ์๋ฆฌ๋ ํ์์ ๋ฐฉ์งํ๋ ๋ฐ ํจ๊ณผ์ ์ ๋๋ค. ์ฌ์ ๋ก๋๋ฅผ ์ฌ์ฉํ๊ณ ๋ค์์ ์ฃผ์ ํฉ๋๋ค.
document.addEventListener('DOMContentLoaded', function () {
document.addEventListener('click', function (e) {
e.preventDefault();
e.stopPropagation();
setTimeout(function () {
var path = e.target.href;
ipcRenderer.sendToHost('element-clicked', path);
}, 100);
return false;
}, true);
});
document.addEventListener('click', fn, true)
์ ์ธ ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ฅผ ํ์ธํ์ธ์.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ด๊ฒ์ ์ฌ์ฉ์๊ฐ ๋งํฌ๋ฅผ ํด๋ฆญํ๊ณ ์์ฒญ๋ URL์ ๋ํด ์ฑ์ ์๋ฆฌ๋ ํ์์ ๋ฐฉ์งํ๋ ๋ฐ ํจ๊ณผ์ ์ ๋๋ค. ์ฌ์ ๋ก๋๋ฅผ ์ฌ์ฉํ๊ณ ๋ค์์ ์ฃผ์ ํฉ๋๋ค.
document.addEventListener('click', fn, true)
์ ์ธ ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ฅผ ํ์ธํ์ธ์.์ฐธ์กฐ: https://stackoverflow.com/questions/6157486/jquery-trap-all-click-events-before-they-happen/6157660#6157660