Electron: Cómo evitar la navegación en la vista web cuando se hace clic en un enlace URL

Creado en 22 ene. 2016  ·  3Comentarios  ·  Fuente: electron/electron

Hola,
Investigué la siguiente oración en la documentación del evento will-navigate (https://github.com/atom/electron/blob/master/docs/api/web-view-tag.md).

Llamar a event.preventDefault() NO tiene ningún efecto.

Entonces, ¿cómo podemos evitar que la vista web navegue a otra página? Tengo la intención de iniciar el navegador predeterminado cuando el usuario hace clic en un enlace URL en la vista web.
Aquí está mi código en el proceso de representación.

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

Con este código, cuando hago clic en el enlace URL en la vista web, la vista web navegará a la nueva página y el navegador predeterminado también se abrirá mostrando la nueva página. Quiero que webview deje de navegar a la nueva página.

Comentario más útil

esto funciona para mí para evitar la navegación a través del usuario haciendo clic en los enlaces y notificando a la aplicación sobre la URL solicitada. Usando precarga e inyectando esto:

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

tenga en cuenta el tercer parámetro en document.addEventListener('click', fn, true)

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

Todos 3 comentarios

Duplicado de #1378.

No veo una solución publicada?

esto funciona para mí para evitar la navegación a través del usuario haciendo clic en los enlaces y notificando a la aplicación sobre la URL solicitada. Usando precarga e inyectando esto:

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

tenga en cuenta el tercer parámetro en document.addEventListener('click', fn, true)

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

¿Fue útil esta página
0 / 5 - 0 calificaciones