Electron: Como impedir a navegação no webview quando um link de URL é clicado

Criado em 22 jan. 2016  ·  3Comentários  ·  Fonte: electron/electron

Oi,
Examinei a seguinte frase na documentação do evento will-navigate (https://github.com/atom/electron/blob/master/docs/api/web-view-tag.md).

Chamar event.preventDefault() NÃO tem nenhum efeito.

Então, como podemos impedir que o webview navegue para outra página? Eu pretendo iniciar o navegador padrão quando o usuário clicar em um link de URL no webview.
Aqui está o meu código no processo de renderização.

 webview.addEventListener('will-navigate', function(e) {
        e.preventDefault();
        require('electron').shell.openExternal(e.url);
 });

Com este código, quando clico no link da URL no webview, o webview navegará para a nova página e o navegador padrão também será aberto mostrando a nova página. Quero que o webview pare de navegar para a nova página.

Comentários muito úteis

isso funciona para mim para impedir a navegação por meio do usuário clicar em links e notificar o aplicativo sobre o URL solicitado. Usando pré-carregamento e injetando isso:

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);
});

observe o 3º parâmetro no document.addEventListener('click', fn, true)

ref: https://stackoverflow.com/questions/6157486/jquery-trap-all-click-events-before-they-happen/6157660#6157660

Todos 3 comentários

Duplicata de #1378.

Não vejo uma solução postada?

isso funciona para mim para impedir a navegação por meio do usuário clicar em links e notificar o aplicativo sobre o URL solicitado. Usando pré-carregamento e injetando isso:

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);
});

observe o 3º parâmetro no document.addEventListener('click', fn, true)

ref: https://stackoverflow.com/questions/6157486/jquery-trap-all-click-events-before-they-happen/6157660#6157660

Esta página foi útil?
0 / 5 - 0 avaliações