es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo hago para que solo *algunos* enlaces se abran en el navegador del sistema en lugar de las ventanas del navegador NW.js?

He creado algo en NW.js. Por defecto, cualquier hipervínculo en el que el usuario pueda hacer clic se abrirá en una nueva ventana del navegador NW.js.

Estoy tratando de hacer que algunos (¡no todos o ninguno!) de estos se abran en el navegador del sistema en lugar de eso. Es importante que estos sean elementos ; no llamadas de función de JavaScript.

Leyendo en esta página: https://nwjs.readthedocs.io/en/latest/References/Window/#event-new-win-policy-frame-url-policy

… Pude hacer que todos los hipervínculos se abran en el navegador del sistema. Pero solo quiero que esto suceda para algunos. Quiero especificar un atributo o algo así, como que se puede verificar en el código:

nw.Window.get().on('new-win-policy', function(frame, url, policy)
{
    policy.ignore();
    nw.Shell.openExternal(url);
});

¿Qué me falta? Si es posible evitarlo, no quiero “analizar la url” para determinar esto, ya que es feo y desordenado. Tanto “frame” como “policy” parecen parámetros inútiles.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para especificar que ciertos hipervínculos se abran en el navegador del sistema en lugar de en una nueva ventana de NW.js, puedes agregar un atributo personalizado a la etiqueta de anclaje, como some-attribute="open-in-system-browser".

    En tu código de NW.js, luego puedes verificar este atributo y abrir condicionalmente el hipervínculo en el navegador del sistema utilizando el método nw.Shell.openExternal(url), en lugar de utilizar la política predeterminada de nueva ventana.

    Aquí tienes un código que puedes utilizar:

    // Comprueba el atributo personalizado cuando un usuario hace clic en un hipervínculo
    document.addEventListener('click', function(event) {
      if (event.target.tagName === 'A' && event.target.getAttribute('some-attribute') === 'open-in-system-browser') {
        event.preventDefault(); // Evita el comportamiento predeterminado de abrir una ventana nueva en NW.js
        nw.Shell.openExternal(event.target.href); // Abre el hipervínculo en el navegador del sistema
      }
    });
    

    Este código escucha cualquier evento de clic en el documento y verifica si el elemento clicado es una etiqueta de anclaje con el atributo personalizado some-attribute. Si es así, evita el comportamiento predeterminado de abrir una nueva ventana en NW.js y en su lugar abre el hipervínculo en el navegador del sistema utilizando nw.Shell.openExternal().

    Ten en cuenta que este código no depende de los parámetros frame y policy en el evento new-win-policy, por lo que no necesitas analizar la URL ni usar esos parámetros.

Comments are closed.