ventana modal example desde bootstrap abrir javascript firefox modal-dialog firefox-addon privileges

javascript - example - Ventana modal transitoria HTML



modal popup jquery example (2)

Tenemos una aplicación web heredada. En varios lugares abre una ventana con la ayuda de Privilege Manager en Firefox para obtener el resultado deseado. Algunas de estas ventanas abren un applet de Java o un documento PDF. Las máquinas del cliente están actualizando Firefox y Privilege Manager se ha ido.

¿Cuál es la forma más fácil de evitarlo? Los problemas son:

  1. Solo debe haber una instancia de la ventana emergente en cualquier momento. Esto se puede hacer seleccionando el nombre de ventana apropiado en la llamada window.open() .

  2. Si la ventana se abre de nuevo (por medio de la acción del usuario), no debería volver a cargarse, sino solo enfocarse para ponerlo en primer plano (he visto que puedo mantener una referencia a la ventana en JavaScript para hacer eso)

  3. Básicamente debe ser transitorio / modal para que el cliente no pueda salir de la página actual o recargar o cualquier otro tipo de interacción con la ventana primaria (excepto para abrir / reenfocar la ventana secundaria) sin cerrar primero la ventana secundaria. No tengo idea de cómo hacer eso.

¿Alguien tiene una idea de cómo hacer eso?

El cliente es solo Firefox (funciona en una configuración especial de kiosco) en Linux.

Leí en algún lado que de alguna manera podría escribir una extensión, pero básicamente no tengo ni idea de las extensiones y su API.

Edit1:

Ejemplo de código heredado (simplificado). No estoy seguro de si se requieren todos los permisos, pero esto es todo: esta función abre una ventana que permanece sobre la ventana primaria y evita cualquier interacción del usuario con la ventana primaria.

function fWindowOpen(url, name) { netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserWrite"); netscape.security.PrivilegeManager .enablePrivilege("CapabilityPreferencesAccess"); netscape.security.PrivilegeManager .enablePrivilege("UniversalPreferencesWrite"); netscape.security.PrivilegeManager .enablePrivilege("UniversalPreferencesRead"); netscape.security.PrivilegeManager.enablePrivilege("UniversalFileRead"); netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); window.open( url, name, "screenX=70,dependent=yes,menubar=0,toolbar=0,width=900,height=700,modal=1,dialog=1" ); } function fnCapture(){ fWindowOpen("/path/to/document_or_japplet/page","_blank"); }

HTML:

<button value="Capture" property="btnCapture" onclick="javascript:fnCapture();"/>

Edit2: Solución

En una extensión típica, en el código xul, defina este código de JavaScript:

var dialogExt = { listener: function(evt) { // Do work with parameters read through evt.target.getAttribute("attribute_name") window.openDialog(evt.target.getAttribute("url"), evt.target.getAttribute("name"), evt.target.getAttribute("features")); } } // from examples document.addEventListener("dialogExtEvent", function(e){ dialogExt.listener(e); }, false, true);

Luego, en la página web:

var element = document.createElement("dialogExtElement"); element.setAttribute("url", url); element.setAttribute("name", name); element.setAttribute("features", features); document.documentElement.appendChild(element); var evt = document.createEvent("Events"); evt.initEvent("dialogExtEvent", true, false); element.dispatchEvent(evt);

Ahora, tal vez me faltan algunas comprobaciones de seguridad para permitir que el código funcione si proviene del mismo host, y cómo manejar una referencia al documento que solicitó el diálogo como medio de interacción entre la ventana de diálogo y su abrelatas.


Debería poder obtener un comportamiento similar a window.open , incluido el soporte para la opción modal desde el módulo windows / utils de sdk.

Tendrá que instalar el oyente onclick con un script de contenido , enviar un mensaje al addon-main a través de su puerto y luego abrir esa ventana desde el complemento principal.


El Administrador de privilegios quedó obsoleto en Firefox 12 y eliminado en Firefox 17 ( restaurado brevemente ).

Es posible que desee buscar en Window.showModalDialog() . Sin embargo, está en desuso y se espera que desaparezca dentro del año, o en 2016 si cuenta con una versión de servicio extendida (ESR) de Firefox 38. Puede ser una solución temporal mientras desarrolla una extensión.

Para llevar a cabo las mismas tareas, deberá escribir una extensión y pedirle al usuario que la instale (a partir de Omitir las Restricciones de Seguridad y el Código de Firma , la información anterior sobre Privilege Manager):

Los sitios que requieren permisos adicionales ahora deberían pedirles a los usuarios de Firefox que instalen una extensión , que puede interactuar con páginas no privilegiadas si es necesario.

Es posible escribir dicha extensión usando cualquiera de los tres tipos de extensiones diferentes:

  1. Superposición XUL
  2. Restartless / Bootstrap
  3. Add-on SDK

Para los primeros dos tipos, usaría window.open() . La opción modal está en "Funciones que requieren privilegios" . Probablemente también quiera mirar Window.openDialog() .

Para el Add-on SDK, normalmente usaría la función open() en el módulo ventana / utilidades del SDK. Aquí, de nuevo, es probable que desee ver openDialog() .

Parece que puede estar abriendo contenido que se proporciona desde la web en estas ventanas modales. Es poco probable que obtenga una extensión aprobada para hospedarse en AMO, que abre contenido en dichas ventanas que no está incluido en el lanzamiento del complemento. Esto no significa que no pueda desarrollar la extensión y que esté instalada en sus clientes de kiosco sin tener que hospedarla en AMO. Sin embargo, este año hay restricciones adicionales en el desarrollo de Firefox que lo harán significativamente más difícil, consulte: "Introducción a la extensión de firmas: una experiencia de complemento más segura" .