Electron: URL ๋งํฌ๋ฅผ ํด๋ฆญํ•  ๋•Œ webview์—์„œ ํƒ์ƒ‰์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•

์— ๋งŒ๋“  2016๋…„ 01์›” 22์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: electron/electron

์•ˆ๋…•,
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๊ฐ€ ์ƒˆ ํŽ˜์ด์ง€ ํƒ์ƒ‰์„ ์ค‘์ง€ํ•˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ด๊ฒƒ์€ ์‚ฌ์šฉ์ž๊ฐ€ ๋งํฌ๋ฅผ ํด๋ฆญํ•˜๊ณ  ์š”์ฒญ๋œ 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) ์˜ ์„ธ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

์ฐธ์กฐ: https://stackoverflow.com/questions/6157486/jquery-trap-all-click-events-before-they-happen/6157660#6157660

๋ชจ๋“  3 ๋Œ“๊ธ€

#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) ์˜ ์„ธ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

์ฐธ์กฐ: https://stackoverflow.com/questions/6157486/jquery-trap-all-click-events-before-they-happen/6157660#6157660

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰