Résumé
window.openDialog
est une extension à window.open(). Elle s'utilise de la même manière, excepté qu'elle peut prendre plusieurs paramètres optionnels après windowFeatures
, et que windowFeatures
est traîté différemment.
Les paramètres optionnels, si présents, seront regroupés dans un objet JavaScript Array et seront accessibles depuis la nouvelle fenêtre par la propriété window.arguments
. Ils sont accessibles depuis les scripts de la fenêtre à tout moment, notamment lors du traitement d'un évênement load
. Ces paramètres peuvent donc être utilisés pour passer des arguments à une boîte de dialogue, et pour les récupérer ensuite.
Notez que l'appel à la méthode openDialog()
se termine immédiatement. Si vous souhaitez le bloqur jusqu'à ce que l'utilisateur ferme la boîte de dialogue, utilisez la valeur modal
pour le paramètre features
. En conséquence, l'utilisateur ne pourra pas interagir avec la fenêtre parente jusqu'à ce qu'il ferme la boîte de dialogue modale.
Syntaxe
newWindow = openDialog(url, name, features, arg1, arg2, ...)
- newWindow
- La nouvelle fenêtre ouverte.
- url
- L'URL du document à charger dans la nouvelle fenêtre.
- name
- Le nom de la fenêtre (optionnel). Voir la description de window.open() pour plus de détails.
- features
- Voir la description de window.open() pour la description.
- arg1, arg2, ...
- Les arguments à passer à la nouvelle fenêtre (optionnel).
Exemple
var win = openDialog("https://example.tld/zzz.xul", "dlg", "", "pizza", 6.98);
Notes
Nouvelles fonctionnalités
-
all
-
Active ou désactive (
"all=no"
) toutes les fonctionnalités (exceptéchrome
,dialog
etmodal
). Peut être utilisé conjointement avec les autres drapeaux (par exemple,"menubar=no, all"
active toutes les fonctionnalités exceptémenubar
). Ce drapeau est ignorée par la méthode window.open() mais pas par window.openDialog().
Comportement
La méthode window.openDialog()
traite l'absence du paramètre features
de la même manière que window.open() (une chaîne vide désactive toutes les fonctionnalités) excepté pour chrome
et dialog
qui sont activés par défaut et peuvent être explicitement désactivées par "chrome=no
".
Passage de paramètres supplémentaires
Pour passer des paramètres supplémentaires à la boîte de dialogue, vous pouvez simplement les ajouter après le paramètre features
:
openDialog("https://example.tld/zzz.xul", "dlg", "", "pizza", 6.98);
Ces paramètres seront ensuite regroupés dans une propriété arguments
de type Array, et cette propriété sera ajoutée à la nouvelle boîte de dialogue.
Pour accéder à ces paramètres depuis un script de la boîte de dialogue, utilisez le procédé suivant :
var food = window.arguments[0]; var price = window.arguments[1];
Notez que vous pouvez accéder à cette propriété depuis n'importe où dans le script. (Autre exemple).
Retourner des arguments depuis la boîte de dialogue
Depuis que window.close()
efface toutes les propriétés associées à la boîte de dialogue (c'est-à-dire les variables spécifiées depuis le code JavaScript chargé depuis la boîte de dialogue), il n'est pas possible de retourner des valeur après la fermeture de la boîte de dialogue en utilisant des variables globales (ou toute autre méthode).
Pour pouvoir retourner des valeurs à la fenêtre parente, vous devez passer un objet via les paramètres supplémentaires. Vous pouvez ensuite accéder à cet objet depuis la boîte de dialogue et modifier ces propriétés, dont les données que vous souhaiter conserver après l'appel à la méthode window.close()
.
var retVals = { address: null, delivery: null }; openDialog("https://example.tld/zzz.xul", "dlg", "modal", "pizza", 6.98, retVals);
Si vous modifiez les propriétés de l'objet retVals
depuis la boîte de dialogue comme décris précédemment, vous pouvez y accéder via le tableau retVals
après l'appel à openDialog()
.
Depuis la boîte de dialogue, vous pouvez modifier les propriétés comme suit :
var retVals = window.arguments[2]; retVals.address = enteredAddress; retVals.delivery = "immediate";
Voir aussi ce message. (Autre exemple).
Voir aussi window.importDialog().
Spécification
DOM Level 0. Ne fait partie d'aucune spécification.