respond rails javascript html ruby-on-rails alert firefox4

javascript - rails - ¿Por qué "Evita que esta página cree cuadros de diálogo adicionales" aparece en el cuadro de alerta?



rails jquery ajax (6)

Qué significa esto ?

Esta es una medida de seguridad en el extremo del navegador para evitar que una página congele el navegador (o la página actual) mostrando mensajes modales (alerta / confirmación) en un bucle infinito. Ver por ejemplo here para Firefox.

No puedes apagar esto. La única forma de evitarlo es usar diálogos personalizados como los diálogos de JQuery UI .

En mi aplicación Rails 3 hago:

render :js => "alert(/"Error!//nEmpty message sent./");" if ...

A veces, debajo de este mensaje de error (en el mismo cuadro de alerta) veo: "Impedir que esta página cree cuadros de diálogo adicionales" y una casilla de verificación.

Qué significa esto ?

¿Es posible no mostrar este texto adicional y la casilla de verificación?

Yo uso Firefox 4.


Diseñé esta función para evitar eludir la casilla de verificación en mis aplicaciones web.

Bloquea toda la funcionalidad de la página mientras se ejecuta (suponiendo que hayan transcurrido menos de tres segundos desde que el usuario cerró el último cuadro de diálogo), pero lo prefiero a una función recursiva o setTimeout ya que no tengo que codificar para la posibilidad de otra cosa al hacer clic o activarse mientras se espera que aparezca el cuadro de diálogo.

Lo necesito más cuando visualizo errores / avisos / confirmaciones en informes que ya están contenidos en Modalbox. Podría agregar un div para diálogos adicionales, pero eso parece demasiado desordenado e innecesario si se pueden usar diálogos incorporados.

Tenga en cuenta que esto probablemente se rompería si dom.successive_dialog_time_limit se cambia a un valor mayor a 3, ni sé si Chrome tiene el mismo valor predeterminado que Firefox. Pero al menos es una opción.

Además, si alguien puede mejorarlo, ¡por favor!

// note that these should not be in the global namespace var dlgRslt, lastTimeDialogClosed = 0; function dialog(msg) { var defaultValue, lenIsThree, type; while (lastTimeDialogClosed && new Date() - lastTimeDialogClosed < 3001) { // timer } lenIsThree = 3 === arguments.length; type = lenIsThree ? arguments[2] : (arguments[1] || alert); defaultValue = lenIsThree && type === prompt ? arguments[1] : ''''; // store result of confirm() or prompt() dlgRslt = type(msg, defaultValue); lastTimeDialogClosed = new Date(); }

uso:

dialog(''This is an alert.''); dialog( ''This is a prompt'', prompt ); dialog(''You entered '' + dlgRslt); dialog( ''Is this a prompt?'', ''maybe'', prompt ); dialog(''You entered '' + dlgRslt); dialog( ''OK/Cancel?'', confirm ); if (dlgRslt) { // code if true }


Es una función del navegador para detener los sitios web que muestran cuadros de alerta molestos una y otra vez.

Como desarrollador web, no puedes deshabilitarlo.


Esta es una característica del navegador.

Si pudiera, intente emplear http://bootboxjs.com/ , con esta biblioteca puede hacer lo mismo de

alert("Empty message sent");

escribiendo:

bootbox.alert("Empty message sent", function(result) { // do something whit result });

¡También obtendrás una buena interfaz de usuario!


Puede crear un cuadro de alerta personalizado utilizando una secuencia de comandos java.

window.alert = function(message) { $(document.createElement(''div'')) .attr({ title: ''Alert'', ''class'': ''alert'' }) .html(message) .dialog({ buttons: { OK: function() { $(this).dialog(''close''); } }, close: function() { $(this).remove(); }, modal: true, resizable: false, width: ''auto'' }); };


Usar los diálogos de JQuery UI no siempre es una solución. Por lo que sé, alerta y confirmación es la única forma de detener la ejecución de un script en un momento determinado. Como solución alternativa, podemos proporcionar un mecanismo para que el usuario sepa que una aplicación necesita llamar alerta y confirmar. Esto se puede hacer así, por ejemplo (donde showError usa un diálogo de jQuery o algún otro medio para comunicarse con el usuario):

var f_confirm; function setConfirm() { f_confirm = confirm; confirm = function(s) { try { return f_confirm(s); } catch(e) { showError("Please do not check ''Prevent this page from creating additional dialogs''"); } return false; }; };