web-dev-qa-db-fra.com

Pourquoi "Empêcher cette page de créer des boîtes de dialogue supplémentaires" apparaît dans la zone d'alerte?

Dans mon application Rails 3, je fais:

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

Parfois, au-dessous de ce message d'erreur (dans la même boîte d'alerte), je vois: "Empêcher cette page de créer des boîtes de dialogue supplémentaires" et une case à cocher.

Qu'est-ce que ça veut dire ?

Est-il possible de ne pas afficher ce texte supplémentaire et cette case à cocher?

J'utilise Firefox 4.

25
Misha Moroshko

Il s'agit d'une fonctionnalité de navigateur permettant d'arrêter les sites Web qui affichent des zones d'alerte gênantes encore et encore.

En tant que développeur Web, vous ne pouvez pas le désactiver.

27
Marcel Korpel

Qu'est-ce que ça veut dire ?

Il s'agit d'une mesure de sécurité à la fin du navigateur pour empêcher une page de geler le navigateur (ou la page en cours) en affichant des messages modaux (alerte/confirmation) dans une boucle infinie. Voir par exemple ici pour Firefox.

Vous ne pouvez pas désactiver cela. La seule solution consiste à utiliser des boîtes de dialogue personnalisées telles que les boîtes de dialogue JQuery UI .

10
Pekka 웃

Vous pouvez créer une boîte d'alerte personnalisée à l'aide d'un script Java. Le code ci-dessous remplacera la fonction d'alerte par défaut.

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'
    });
};
3
Arun

Utiliser Les boîtes de dialogue de JQuery UI n'est pas toujours une solution. Autant que je sache, alerter et confirmer est le seul moyen d'arrêter l'exécution d'un script à un moment donné. En guise de solution de contournement, nous pouvons fournir un mécanisme permettant à l'utilisateur de savoir qu'une application doit appeler, alerter et confirmer. Cela peut être fait comme ceci par exemple (où showError utilise une boîte de dialogue jQuery ou un autre moyen de communiquer avec l'utilisateur):

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;
  };
};
0
mozey

J'ai conçu cette fonction pour éviter, espérons-le, la case à cocher de mes applications Web.

Il bloque toutes les fonctionnalités de la page en cours d'exécution (en supposant que moins de trois secondes se sont écoulées depuis que l'utilisateur a fermé la dernière boîte de dialogue), mais je le préfère à une fonction récursive ou setTimeout car je n'ai pas à coder pour la possibilité d'autre chose être cliqué ou déclenché en attendant que la boîte de dialogue apparaisse.

J'en ai le plus besoin lorsque des erreurs/invites/confirmations sont affichées sur des rapports déjà contenus dans Modalbox. Je pourrais ajouter un div pour des boîtes de dialogue supplémentaires, mais cela semble tout simplement trop compliqué et inutile si des boîtes de dialogue intégrées peuvent être utilisées.

Notez que cela casserait probablement si dom.successive_dialog_time_limit était remplacé par une valeur supérieure à 3, et je ne savais pas si Chrome avait la même valeur par défaut que Firefox. Mais au moins c'est une option.

Aussi, si quelqu'un peut l'améliorer, faites-le, s'il vous plaît!

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

usage: 

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
}
0
Queue

Ceci est une fonctionnalité du navigateur.

Si vous le pouvez, essayez d’utiliser http://bootboxjs.com/ , avec cette bibliothèque, vous pouvez faire de même. 

alert("Empty message sent");

en écrivant:

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

Vous aurez aussi une interface utilisateur Nice!

0
zeppaman