neoxdragon
Messages postés16Date d'inscriptionmercredi 6 août 2003StatutMembreDernière intervention 2 janvier 2007
-
6 janv. 2004 à 21:19
cs_AbriBus
Messages postés492Date d'inscriptionjeudi 28 août 2003StatutMembreDernière intervention25 avril 2007
-
12 juin 2006 à 11:43
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
cs_AbriBus
Messages postés492Date d'inscriptionjeudi 28 août 2003StatutMembreDernière intervention25 avril 20075 12 juin 2006 à 11:43
Hmmm... tres interressant... je vais voir ca... Si ca fonctionne ca serait cool.
J'immagine que netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserWrite'); ne doit figurer que si le client n'est pas IE bien sur.
Ca fait beaucoup penser a java :P
Merci Bridloaque
AbriBus
bridloaque
Messages postés1Date d'inscriptionlundi 12 juin 2006StatutMembreDernière intervention12 juin 2006 12 juin 2006 à 11:06
Pour Firefox, la soluce afin que 'modal' soit pris en compte et géré correctement :
avant le window.open avec option modal,
faire "netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserWrite');"
(voir, au besoin, la configuration du fichier user.js de Firefox pour configurer correctement les droits)
Voilà !
cs_AbriBus
Messages postés492Date d'inscriptionjeudi 28 août 2003StatutMembreDernière intervention25 avril 20075 18 mai 2006 à 23:59
J'ai deposé un petit src quand meme... je l'ai un peu embelli par rapport au post que j'avais fait ici meme un peu plus haut... etpuis j'ai mis plus de commentaires et un peu plus d'intelligence... normalement, ca ne devrait produire aucune erreur javascript quelque soit le navigateur et sa version. J'y fait egalement de l'extraction de parametres en javascript.
Dispo: http://www.javascriptfr.com/code.aspx?ID=37659
Bon' Prog'
'BriBus
axuz
Messages postés3Date d'inscriptionmardi 21 février 2006StatutMembreDernière intervention15 mai 2006 15 mai 2006 à 13:07
En fait je dois adapter un programme déjà existant et fonctionnant parfaitement sous IE pour qu'il soit compatible FireFox... et ce principe de fenetre modale pour réaliser une pause est utilisée pour chaque ouverture de page (dans nouvelle fenetre ou dans une frame ...).
En conclusion de mon étude de faisabilité j'ai dis qu'il fallait réfléchir à une autre manière d'approcher la chose, mais les modifications sont très importantes ! Ce projet est donc en "pause" lol
Et ben si quelqu'un à une alternative qu'il le fasse savoir!
Merci
AxuZ
cs_AbriBus
Messages postés492Date d'inscriptionjeudi 28 août 2003StatutMembreDernière intervention25 avril 20075 11 mai 2006 à 18:29
C'est tout a fait ca azux, FF n'est pas multithread... et il ne reconnait pas de fonction javascript qui permettre de le mettre en "pause"... sinon, il y aurait bien eut la bonne vielle methode à la QBasic de faire une boucle dont la condition de sortie aurait été la fermeture de la fenetre mais si tu fais ca (vu qu'il y a pas de pause) ca te claque ton UC à 100% tant que t'as pas fermé ta fenetre... en plus (et heureusement je dirais) au bout d'une dizaine de seconde, FF te previent que "un script ne repond plus" (normal puisqu'il boucle)... donc pour le moment, pas de solution technique au probleme sauf a utiliser ces fameux alerte() prompt() et confirm() (trop moche !! beark :()
Il est vrai que le principe de modalité n'est pas simple a expliquer. Il est pareillement vrai que cette histoire avec FF c'est un peu la daube parceque les clients quand ils ont une idee dans la tete, ils l'on pas ailleur ! Sans pretention, je pense que les exigences qui m'ont été communiquées sont au moins aussi strictes que les tiennes... (et je comprend donc fort bien que tu sois dans le "petrin")
Bon courrage
'BriBus
axuz
Messages postés3Date d'inscriptionmardi 21 février 2006StatutMembreDernière intervention15 mai 2006 11 mai 2006 à 16:20
Hello,
Merci Abribus pour ton script, en faisant certaines recherches (après des tests, je me suis effectivement rendu compte que modal pour FF ca veut pas dire gd chose...lol) j'ai fini par trouver du code qui créé bien une fenetre modale, mais je ne l'ai pas testée en profondeur ... Ni ton script d'ailleurs.
En fait j'utilise cette fenetre modale avec un timeout qui la referme automatiquement après un certain temps dans le but de créer une sorte de pause.
Mais après différents tests, je me rends compte que FireFox n'est pas multi thread et que IE bien => suis dans la M?#dfsdf ...
Me suis rendu compte que FF devait terminer la boucle qui appelait la fonction pause (qui contient la fenetre modale) pour effectuer le code de la fenetre qui s'ouvre (et dont la boucle vérifie la bonne ouverture avec une variable qui est modifiée avec un onload)... La boucle tourne tant que la fenetre n'est pas completement chargée.(sorry trop compliqué à expliquer facilement)
Je n'ai pas cherché beaucoup plus loin et je suis passé à autre chose, mais je serais bien tenté d'approfondir le sujet pour m'assurer que ton code (ou celui trouvé sur le net) peut convenir à mes attentes et mes exigences logicielles très strictes...
De plus, phénomène bizarre, ma fenetre modale sous IE n'apparait pas à l'écran (son but n'est QUE de suspendre l'execution du code)...
AxuZ
sheorogath
Messages postés2448Date d'inscriptionsamedi 21 février 2004StatutModérateurDernière intervention29 janvier 201017 10 mai 2006 à 20:50
lol suppression ^^ ou peut etre pas
cs_AbriBus
Messages postés492Date d'inscriptionjeudi 28 août 2003StatutMembreDernière intervention25 avril 20075 10 mai 2006 à 20:17
lol... sisi j't'assure rick, ca me fait tout a fait rigoler... :D c'est ca qu'est bon... rigoler en faisant son boulo... ;)
Bob> Merci pour ton comment encourageant mais je n'ai rien fait de plus que toi... j'veux dire, j'ai repris ce que t'as fait et dans les cas ou ca marche pas, je fait avec autre chose... c'est a dire une m?#D? de messagebox inclus dans FF toute pourrie alors qu'avec IExplore on fait une vraie fenetre de cinglé... mais des que je trouve la reponse a ma question (a savoir comment faire pour que ca marche a tous les coups, IExplore ou pas), je post... ;)
Et puis, si je post la meme source que toi, quelques tests en plus... il diraient quoi les admins...? hein sheorogath ;)
sheorogath
Messages postés2448Date d'inscriptionsamedi 21 février 2004StatutModérateurDernière intervention29 janvier 201017 10 mai 2006 à 15:33
bonne idee ca pourras etre utile ^^
bob3000
Messages postés406Date d'inscriptionmardi 7 mai 2002StatutMembreDernière intervention 2 octobre 2004 10 mai 2006 à 14:53
OH, ca c'est bon =D !! tu devrais poster la source ici :P
rickenter
Messages postés3Date d'inscriptionmercredi 15 janvier 2003StatutMembreDernière intervention10 mai 2006 10 mai 2006 à 12:17
hehe, tu rigoles pas toi quand tu fais des script ;)
cs_AbriBus
Messages postés492Date d'inscriptionjeudi 28 août 2003StatutMembreDernière intervention25 avril 20075 10 mai 2006 à 11:42
rickenter> Tu as tout a fait raison... mais dans ces cas la, il ne s'agit plus d'une fenetre modale... qui a un fonctionnement tres particulier... Tu parles d'une 'fenetre de premier plan' ou d'une fenetre 'AOT' (Always On Top).
J_G> T'as bien raison, pour "ceux qui s'y connaissent" c'est vraiment cool de pas se faire emm?rD?r la vie par des stupidité sur les sites pornos. ^^ Mais quand tu fais du webdev pour des clients parfois un peu neuneu qui comprennent pas que s'ils ferment une page sans soumetre le formulaire qu'elle contient les données ne seront pas enregistrées (un peu genre... "allo Nix ? excuse moi je comprend pas j'ai écrit quelque chose dans la page web sur CS mais quand j'ai quitté ca n'a pas enregistré"... LOL)
Voila... j'ai fait un morceau de code (commenté !) qui propose une solution pour "fabriquer" des fenetre modale tant pour FF que pour IE au mieu de ce que permet la version de javascript presente coté client.
Le code est un peu rebarbatif mais il marche bien... et prend en charge la gestion multilingue
Premiere partie (a placer dans la page appelant la fenetre modale):
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<script>
// Initialisation des valeurs constantes définissant le type de fenetre
cstYESNO = 1;
cstOK = 2;
cstINPUT = 3;
langage_id = 0; // Ici c'est le Numero affecté a la langue (0 francais, 1 Anglais)
mes_taille = new Array(3); // Tableau contenant les couples de tailles (x, y) de la fanetre en pixels
mes_taille[1] = new Array(400, 200);
mes_taille[2] = new Array(600, 800);
mes_titre new Array(); // Tableau contenant les n-uplets des titres de fenetre (n nombre de langues)
mes_titre[0] = new Array('Fenetre Francaise', 'English window');
mes_etiquette new Array(); // Tableau contenant les n-uplets des messages (n nombre de langues)
mes_etiquette[0] = new Array('Etes vous sur(e) de vouloir fermer cette fenetre ?', 'Are you sure you want to close this window ?')
function ShowModalBox(typeBox, IdMessage, IdTailleFenetre, Parametre)
{
if (navigator.appName == "Microsoft Internet Explorer") // Pour internet explorer
{
if(showModalDialog) // S'il existe la fonction showModalDialog (IE 4 +)
{
featStr = 'center:yes; status:no; unadorned:yes; dialogWidth:' + mes_taille[IdTailleFenetre][0] + ' px; dialogHeight: ' + mes_taille[IdTailleFenetre][1] + ' px';
argv = new Array(10); // Creation du tableau de paramettre
argv[0] = typeBox; // Insertion du type de boite de dialogue
argv[1] = mes_etiquette[IdMessage][langage_id]; // Insertion du message dans le tableau de parametre en fonction de son Id
argv[2] = mes_titre[IdMessage][langage_id]; // Insertion du titre de la fenetre
argv[3] = Parametre; // Insertion du parametre eventuel
return window.showModalDialog("msgbox.html", argv, featStr);
}
else // Sinon (comme pour les clients autre que IE)
{
Msg = mes_etiquette[IdMessage][langage_id]; // Recuperation du message par son Id
if(typeBox == cstYESNO) // Si oui ou non
{
return confirm(Msg); // Demande si oui ou si non
}
else if(typeBox == cstOK) // Si Ok
{
return alert(Msg); // Indique le message
}
else if(typeBox == cstINPUT) // Si saisie de texte
{
return prompt(Msg, Parametre);
}
}
}
else // Si le client web n'est pas IE, affichage de la boite de dialogue classique
{
Msg = mes_etiquette[IdMessage][langage_id]; // Recuperation du message par son Id
if(typeBox == cstYESNO) // Si oui ou non
{
return confirm(Msg); // Demande si oui ou si non
}
else if(typeBox == cstOK) // Si Ok
{
return alert(Msg); // Indique le message
}
else if(typeBox == cstINPUT) // Si saisie de texte
{
return prompt(Msg, Parametre);
}
}
}
document.write('Vous avez repondu ' + ShowModalBox(cstYESNO, 0, 1, '')); // Affichage de la boite de dialogue et du resultat
</script>
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Deuxieme partie (a placer dans un fichier nommé msgbox.html):
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<script>
if (navigator.appName !"Microsoft Internet Explorer"){window.document.location 'erreur2.asp?msg=Impossible d\'afficher cette page, votre navigateur ne vous le permet pas.';}
cstYESNO = 1;
cstOK = 2;
cstINPUT = 3;
argv = window.dialogArguments;
var jtypeBox = argv[0];
var jmessage = argv[1];
window.document.title = argv[2];
var jParametre = argv[3];
function setRetVal(retVal)
{
window.returnValue = retVal;
window.close();
}
</script>
Voila... si vous trouvez une autre alternative a l'utilisation de ces alert(), confirm() et prompt() pour FF et IE < 4.0 oubliez pas de partager ;)
AbriBus
J_G
Messages postés1406Date d'inscriptionmercredi 17 août 2005StatutMembreDernière intervention28 août 200710 10 mai 2006 à 11:25
<< la fonction "onblur="self.focus();" mais qui n'est pas vraiment pro et peut très vite devenir très énérvant pour l'utilisateur.>>
Ouaips ! Franchement agançant les petites fenêtres genre : "Vote pour mon site, vote pour mon site, vote pour mon site, vote pour mon site, vote pour mon site, ..."
Vous avez remarqué qu'en XHTML Strict, l'attribut "target" n'existe même plus pour l'élément ... Selon la W3C, l'utilisateur doit être seul juge pour ouvrir le lien dans une nouvelle fenêtre ou la courrante. (Bon, on peut toujours se la faire en , mais c'est pas la même chose...).
Cette politique me plait...
Note de plus : resize=no est aussi ignoré avec FF...
Merci FF ;)
rickenter
Messages postés3Date d'inscriptionmercredi 15 janvier 2003StatutMembreDernière intervention10 mai 2006 10 mai 2006 à 10:49
Le but de ce script n'est pas de suspendre un quelquonque script mais bien d'obliger la pop-up à rester au premier plan afin d'être sur que l'utilisateur aura bien sélectioné une valeur sans retourner sur la page mère (en laissant la pop-up derrière par exemple). On aurait effectivement pu utiliser la fonction "onblur="self.focus();" mais qui n'est pas vraiment pro et peut très vite devenir très énérvant pour l'utilisateur.
Maintenant il est vrai que pour les utilsateur de windows 3.11 avec ie2 ca ne focntionne pas, mais là je ne peut rien faire pour eux ;)
Rick
cs_AbriBus
Messages postés492Date d'inscriptionjeudi 28 août 2003StatutMembreDernière intervention25 avril 20075 10 mai 2006 à 08:08
Lol Bob... C'est peut etre vrai mais ce serait a tord... Vb gere des fenetre modale... et pourtant on l'accuse pas de plagier les features de java ou de C++... qui pourtant gerent tous deux (entre autre) les fenetres modales aussi...
:D
AbriBus
bob3000
Messages postés406Date d'inscriptionmardi 7 mai 2002StatutMembreDernière intervention 2 octobre 2004 10 mai 2006 à 07:26
"Tout de meme on aurait pu s'attendre a ce que firefox gere lesfenetre modale... non ?"
lol, on l'aurait accusé de copier les features de IE :P
cs_AbriBus
Messages postés492Date d'inscriptionjeudi 28 août 2003StatutMembreDernière intervention25 avril 20075 10 mai 2006 à 07:09
Salut J_G,
C'est vrai que ta facon de "fabriquer" une modale a partir de ce qui n'en est pas une est assez amusante. c'estapréciable... n'en reste pas moins que si l'utilisateur le souhaite, il peut continuer de naviguer dans la page mere.
Comme le disait bob3000, "(...)tandis que les modaldialog restent devant la page.". En fait tu fais une modale a partir d'une modelessbien sur c'est recevable... :D mais si tu peint une pasteque en jaune, ca n'en fait pas un citron :D:D
Tout de meme on aurait pu s'attendre a ce que firefox gere lesfenetre modale... non ?
J_G
Messages postés1406Date d'inscriptionmercredi 17 août 2005StatutMembreDernière intervention28 août 200710 10 mai 2006 à 01:44
Bonjour,
Pour aller plus loin, une bonne façon de forcer le passage par la fenêtre pop-up est de ne pas activer le lien ! Exemple:
[www.toto.fr lien vers toto.fr]
et dans la page se trouvant à 'url', affichée dans la fenêtre nommée 'titre'.
Nous pourrions trouver ce code (derrière une validation) :
Mais si FireFox ne veut pas de fenêtre modale, c'est pour garantir la liberté d'action de l'utilisateur... Et tant mieux !
Une autre façon de faire une fenêtre modale ?
Essayez un truc comme ça :
<html>
</html>
IE fera du modal, FireFox refusera au deuxième clic hors de la fenêtre...
Merci FF.
cs_AbriBus
Messages postés492Date d'inscriptionjeudi 28 août 2003StatutMembreDernière intervention25 avril 20075 9 mai 2006 à 22:42
Salut RickEnter,
Si tu me permet Deux petites remarques sur ton code (posté sans explications !):
Tout d'abord,la fonction if(window.showModalDialog) Ne fonctionnera que sur IE 4.0 ou plus. Ce qui soit dit en passant est fort dommage quand on sait a quel point c'est pratique. Je vais expliquer pour Mr Enter qui ne l'a pas fait precedemment, à partir de l'une des version de JavaScript (celle de IE 5 donc), il est possible de verifier l'existance d'une fonction par l'utilisation de la fonction if([fonction]) qui renverra true ou false selon que la version de JavaScript la reconnait ou pas. (Ne fonctionne pas avec FireFox !!!!!).
En outre, et comme je le disait precedemment, la fonction window.open a laquelle on affecte les variables (url,titre,'height='+hauteur+',width='+largeur+',toolbar=no,menubar=no,location=no,resizable=no,scrollbars='+scroll+',modal=yes') ne produit PAS (a l'instar de ce que le paramettre "modal=" pourrait laisser sous entendre) une fenetre modale.
Afin qu'il n'y ai pas de confusion, je vais donner un exemple de fenetre modale:
lorsque vous remplissez un formulaire, et que vous decidez de changer de page SANS soumettre le formulaire, il se peut que vous ayez a utiliser une fenetre modale pour dire par exemple "Vous allez quitter la page blablabla (...) Etes vous sur(e) ?" avec un bouton "Oui" et un bouton "Non". Il va de soit que le lien d'une page a l'autre ne doit se faire QUE si l'utilisateur clique sur "Oui". Durant l'interval de temps separant l'apparition du message et la validation du choix de l'utilisateur, le code sera mit "en attente" (d'ou l'expression "suspendre l'interpretation, meme si apliqué au web, ca ne veut pas dire grand chose)
ceci se traduirait par un lien du type:
[www.toto.fr aller vers toto.fr]
La fenetre qui s'ouvrira sera modale pour IE et attendra de savoir quelle est la valeur du return pour effectuer ou non le saut d'une page a l'autre (si return = false alors la page ne suivra pas le lien).
En revanche, le code suivant affiche bien la page attendue comme la fenetre de confirmation mais n'attend pas le return et suivra le lien quoi qu'il arrive (et avant meme que vous ayez repondu, preuve s'il en est que la fenetre n'est pas modale):
[www.toto.fr lien vers toto.fr]
Merci quand meme Rick pour ton code.
AbriBus
rickenter
Messages postés3Date d'inscriptionmercredi 15 janvier 2003StatutMembreDernière intervention10 mai 2006 9 mai 2006 à 17:50
function modalwindow(url,titre,largeur,hauteur,scroll){
if(window.showModalDialog){
window.showModalDialog(url,titre,'dialogHeight:'+hauteur+'px;dialogWidth:'+largeur+'px;resizable:0;status:1;center:1;scroll='+scroll+';help:0');
}else{
window.open(url,titre,'height='+hauteur+',width='+largeur+',toolbar=no,menubar=no,location=no,resizable=no,scrollbars='+scroll+',modal=yes')
}
}
cs_AbriBus
Messages postés492Date d'inscriptionjeudi 28 août 2003StatutMembreDernière intervention25 avril 20075 28 mars 2006 à 13:08
nan, l'option "modal" de firefox est une M?#D?... c'est pas un vrai modal, c'est juste pour dire a la fenetre créée de n'afficher ni barre de statut ni barre de navigation (mais ca ne suspend pas l'execution du reste du code... a l'instar d'une VRAIE fenetre modale)
AbriBus
axuz
Messages postés3Date d'inscriptionmardi 21 février 2006StatutMembreDernière intervention15 mai 2006 28 mars 2006 à 13:04
cs_AbriBus
Messages postés492Date d'inscriptionjeudi 28 août 2003StatutMembreDernière intervention25 avril 20075 23 févr. 2006 à 15:20
Salut a tous,
J_G> showModalDialog est une foction specifique à IE 4 ou +. Donc avec FireFox, bah il te dit qu'il connait pas la fonction (puisque ce n'est pas IE)
NEVERFORGET> Ton script est bien, et il fonctionne nikel, tant que
1) soit tu est sous IE
2) soit la modalité de ta fenetre n'importe pas (window.open est une fonction javascript basic mais ne defini pas la page ouverte en tant que modale) ce qui est parfois important, nottament pour produire des messagebox en webdevelopment. L'astuce n'en reste pas moins bonne. Toutefois, si la fenetre modale n'est pas necessaire, autant utiliser window.open qui marche tout le temps, meme sous IE.
Personne n'aurait trouvé le moyen de generer un page modale avec FireFox par hazard ?
safo17
Messages postés2Date d'inscriptionvendredi 6 août 2004StatutMembreDernière intervention 9 janvier 2006 9 janv. 2006 à 13:56
Bravo pour le script
J_G
Messages postés1406Date d'inscriptionmercredi 17 août 2005StatutMembreDernière intervention28 août 200710 28 sept. 2005 à 20:18
Bonjour...
Euh j'aurais une petite question :
"Erreur : window.showModalDialog is not a function" ?
J'utilise FireFox est la ligne qui bug est : "window.showModalDialog('exemple.html','','dialogHeight: 400px; dialogWidth: 500px; center: Yes; help: No; resizable: No; status: No;');"
Bizare !?!
cs_NEVERFORGET
Messages postés21Date d'inscriptiondimanche 10 octobre 2004StatutMembreDernière intervention23 juin 2008 8 juin 2005 à 13:55
<script>
function modelesswin(url,mwidth,mheight){
if (document.all&&window.print) //if ie5
eval('window.showModelessDialog(url,"","help:0;resizable:0;dialogWidth:'+mwidth+'px;dialogHeight:'+mheight+'px")')
else
eval('window.open(url,"","width='+mwidth+'px,height='+mheight+'px,resizable=0,scrollbars=0")')
}
//Configurez les dimensions a la place de 490 260
modelesswin("http://www.americas-fr.com/voyages/pub-mexique.html",490,260)
</script>
J'ai trouvé ça. Ca pourra peut-être vous aider...
bob3000
Messages postés406Date d'inscriptionmardi 7 mai 2002StatutMembreDernière intervention 2 octobre 2004 3 juin 2005 à 23:56
bloqué? je ne comprends pas.
astuces_jeux
Messages postés731Date d'inscriptionmercredi 15 novembre 2000StatutMembreDernière intervention27 mai 2010 3 juin 2005 à 20:15
Je suis d'accord y a - t - il un autre moyen qui n'est pas bloquer
Bub325
Messages postés41Date d'inscriptiondimanche 9 février 2003StatutMembreDernière intervention28 avril 2010 1 juin 2005 à 23:14
ce script est bloqué par IE 6 et firefox, y a t'ilun autre moyen qui ne soit pas bloqué ?
astuces_jeux
Messages postés731Date d'inscriptionmercredi 15 novembre 2000StatutMembreDernière intervention27 mai 2010 27 mai 2005 à 16:33
Bonjour,
Merci beaucoup je cherchais depuis longtemps comment on fait mais y a t-il moyen de désactiver la croit rouge quitter
Merci de m'aider
Astuces_jeux
azeuw
Messages postés2Date d'inscriptionjeudi 18 juillet 2002StatutMembreDernière intervention 5 septembre 2004 5 sept. 2004 à 13:20
Ca marche :)
(=vive le pdr)
bob3000
Messages postés406Date d'inscriptionmardi 7 mai 2002StatutMembreDernière intervention 2 octobre 2004 7 janv. 2004 à 02:21
lol, merci! J'ai vu ta source et je me suis dit que je pourrais peut-être l'approfondir.
neoxdragon
Messages postés16Date d'inscriptionmercredi 6 août 2003StatutMembreDernière intervention 2 janvier 2007 6 janv. 2004 à 21:19
OOOOOOOOOOOOOOOOOOU Copieur je viens de le sortir avant toi euh !!
LOL
En fait Bravo ton script est bien mieux expliqué !
12 juin 2006 à 11:43
J'immagine que netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserWrite'); ne doit figurer que si le client n'est pas IE bien sur.
Ca fait beaucoup penser a java :P
Merci Bridloaque
AbriBus
12 juin 2006 à 11:06
avant le window.open avec option modal,
faire "netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserWrite');"
(voir, au besoin, la configuration du fichier user.js de Firefox pour configurer correctement les droits)
Voilà !
18 mai 2006 à 23:59
Dispo: http://www.javascriptfr.com/code.aspx?ID=37659
Bon' Prog'
'BriBus
15 mai 2006 à 13:07
En conclusion de mon étude de faisabilité j'ai dis qu'il fallait réfléchir à une autre manière d'approcher la chose, mais les modifications sont très importantes ! Ce projet est donc en "pause" lol
Et ben si quelqu'un à une alternative qu'il le fasse savoir!
Merci
AxuZ
11 mai 2006 à 18:29
Il est vrai que le principe de modalité n'est pas simple a expliquer. Il est pareillement vrai que cette histoire avec FF c'est un peu la daube parceque les clients quand ils ont une idee dans la tete, ils l'on pas ailleur ! Sans pretention, je pense que les exigences qui m'ont été communiquées sont au moins aussi strictes que les tiennes... (et je comprend donc fort bien que tu sois dans le "petrin")
Bon courrage
'BriBus
11 mai 2006 à 16:20
Merci Abribus pour ton script, en faisant certaines recherches (après des tests, je me suis effectivement rendu compte que modal pour FF ca veut pas dire gd chose...lol) j'ai fini par trouver du code qui créé bien une fenetre modale, mais je ne l'ai pas testée en profondeur ... Ni ton script d'ailleurs.
En fait j'utilise cette fenetre modale avec un timeout qui la referme automatiquement après un certain temps dans le but de créer une sorte de pause.
Mais après différents tests, je me rends compte que FireFox n'est pas multi thread et que IE bien => suis dans la M?#dfsdf ...
Me suis rendu compte que FF devait terminer la boucle qui appelait la fonction pause (qui contient la fenetre modale) pour effectuer le code de la fenetre qui s'ouvre (et dont la boucle vérifie la bonne ouverture avec une variable qui est modifiée avec un onload)... La boucle tourne tant que la fenetre n'est pas completement chargée.(sorry trop compliqué à expliquer facilement)
Je n'ai pas cherché beaucoup plus loin et je suis passé à autre chose, mais je serais bien tenté d'approfondir le sujet pour m'assurer que ton code (ou celui trouvé sur le net) peut convenir à mes attentes et mes exigences logicielles très strictes...
De plus, phénomène bizarre, ma fenetre modale sous IE n'apparait pas à l'écran (son but n'est QUE de suspendre l'execution du code)...
AxuZ
10 mai 2006 à 20:50
10 mai 2006 à 20:17
Bob> Merci pour ton comment encourageant mais je n'ai rien fait de plus que toi... j'veux dire, j'ai repris ce que t'as fait et dans les cas ou ca marche pas, je fait avec autre chose... c'est a dire une m?#D? de messagebox inclus dans FF toute pourrie alors qu'avec IExplore on fait une vraie fenetre de cinglé... mais des que je trouve la reponse a ma question (a savoir comment faire pour que ca marche a tous les coups, IExplore ou pas), je post... ;)
Et puis, si je post la meme source que toi, quelques tests en plus... il diraient quoi les admins...? hein sheorogath ;)
10 mai 2006 à 15:33
10 mai 2006 à 14:53
10 mai 2006 à 12:17
10 mai 2006 à 11:42
J_G> T'as bien raison, pour "ceux qui s'y connaissent" c'est vraiment cool de pas se faire emm?rD?r la vie par des stupidité sur les sites pornos. ^^ Mais quand tu fais du webdev pour des clients parfois un peu neuneu qui comprennent pas que s'ils ferment une page sans soumetre le formulaire qu'elle contient les données ne seront pas enregistrées (un peu genre... "allo Nix ? excuse moi je comprend pas j'ai écrit quelque chose dans la page web sur CS mais quand j'ai quitté ca n'a pas enregistré"... LOL)
Voila... j'ai fait un morceau de code (commenté !) qui propose une solution pour "fabriquer" des fenetre modale tant pour FF que pour IE au mieu de ce que permet la version de javascript presente coté client.
Le code est un peu rebarbatif mais il marche bien... et prend en charge la gestion multilingue
Premiere partie (a placer dans la page appelant la fenetre modale):
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<script>
// Initialisation des valeurs constantes définissant le type de fenetre
cstYESNO = 1;
cstOK = 2;
cstINPUT = 3;
langage_id = 0; // Ici c'est le Numero affecté a la langue (0 francais, 1 Anglais)
mes_taille = new Array(3); // Tableau contenant les couples de tailles (x, y) de la fanetre en pixels
mes_taille[1] = new Array(400, 200);
mes_taille[2] = new Array(600, 800);
mes_titre new Array(); // Tableau contenant les n-uplets des titres de fenetre (n nombre de langues)
mes_titre[0] = new Array('Fenetre Francaise', 'English window');
mes_etiquette new Array(); // Tableau contenant les n-uplets des messages (n nombre de langues)
mes_etiquette[0] = new Array('Etes vous sur(e) de vouloir fermer cette fenetre ?', 'Are you sure you want to close this window ?')
function ShowModalBox(typeBox, IdMessage, IdTailleFenetre, Parametre)
{
if (navigator.appName == "Microsoft Internet Explorer") // Pour internet explorer
{
if(showModalDialog) // S'il existe la fonction showModalDialog (IE 4 +)
{
featStr = 'center:yes; status:no; unadorned:yes; dialogWidth:' + mes_taille[IdTailleFenetre][0] + ' px; dialogHeight: ' + mes_taille[IdTailleFenetre][1] + ' px';
argv = new Array(10); // Creation du tableau de paramettre
argv[0] = typeBox; // Insertion du type de boite de dialogue
argv[1] = mes_etiquette[IdMessage][langage_id]; // Insertion du message dans le tableau de parametre en fonction de son Id
argv[2] = mes_titre[IdMessage][langage_id]; // Insertion du titre de la fenetre
argv[3] = Parametre; // Insertion du parametre eventuel
return window.showModalDialog("msgbox.html", argv, featStr);
}
else // Sinon (comme pour les clients autre que IE)
{
Msg = mes_etiquette[IdMessage][langage_id]; // Recuperation du message par son Id
if(typeBox == cstYESNO) // Si oui ou non
{
return confirm(Msg); // Demande si oui ou si non
}
else if(typeBox == cstOK) // Si Ok
{
return alert(Msg); // Indique le message
}
else if(typeBox == cstINPUT) // Si saisie de texte
{
return prompt(Msg, Parametre);
}
}
}
else // Si le client web n'est pas IE, affichage de la boite de dialogue classique
{
Msg = mes_etiquette[IdMessage][langage_id]; // Recuperation du message par son Id
if(typeBox == cstYESNO) // Si oui ou non
{
return confirm(Msg); // Demande si oui ou si non
}
else if(typeBox == cstOK) // Si Ok
{
return alert(Msg); // Indique le message
}
else if(typeBox == cstINPUT) // Si saisie de texte
{
return prompt(Msg, Parametre);
}
}
}
document.write('Vous avez repondu ' + ShowModalBox(cstYESNO, 0, 1, '')); // Affichage de la boite de dialogue et du resultat
</script>
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Deuxieme partie (a placer dans un fichier nommé msgbox.html):
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<script>
if (navigator.appName !"Microsoft Internet Explorer"){window.document.location 'erreur2.asp?msg=Impossible d\'afficher cette page, votre navigateur ne vous le permet pas.';}
cstYESNO = 1;
cstOK = 2;
cstINPUT = 3;
argv = window.dialogArguments;
var jtypeBox = argv[0];
var jmessage = argv[1];
window.document.title = argv[2];
var jParametre = argv[3];
function setRetVal(retVal)
{
window.returnValue = retVal;
window.close();
}
</script>
<script>document.write('
' + jmessage + '
');</script>
<script>
if(jtypeBox == cstYESNO){
document.write('
,
');
}else if(jtypeBox == cstOK){
document.write('
');
}else if(jtypeBox == cstINPUT){
document.write('<form name="demandeur" action="#">
</form>');
}
</script>
</html>
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Voila... si vous trouvez une autre alternative a l'utilisation de ces alert(), confirm() et prompt() pour FF et IE < 4.0 oubliez pas de partager ;)
AbriBus
10 mai 2006 à 11:25
Ouaips ! Franchement agançant les petites fenêtres genre : "Vote pour mon site, vote pour mon site, vote pour mon site, vote pour mon site, vote pour mon site, ..."
Vous avez remarqué qu'en XHTML Strict, l'attribut "target" n'existe même plus pour l'élément ... Selon la W3C, l'utilisateur doit être seul juge pour ouvrir le lien dans une nouvelle fenêtre ou la courrante. (Bon, on peut toujours se la faire en , mais c'est pas la même chose...).
Cette politique me plait...
Note de plus : resize=no est aussi ignoré avec FF...
Merci FF ;)
10 mai 2006 à 10:49
Maintenant il est vrai que pour les utilsateur de windows 3.11 avec ie2 ca ne focntionne pas, mais là je ne peut rien faire pour eux ;)
Rick
10 mai 2006 à 08:08
:D
AbriBus
10 mai 2006 à 07:26
lol, on l'aurait accusé de copier les features de IE :P
10 mai 2006 à 07:09
C'est vrai que ta facon de "fabriquer" une modale a partir de ce qui n'en est pas une est assez amusante. c'estapréciable... n'en reste pas moins que si l'utilisateur le souhaite, il peut continuer de naviguer dans la page mere.
Comme le disait bob3000, "(...)tandis que les modaldialog restent devant la page.". En fait tu fais une modale a partir d'une modelessbien sur c'est recevable... :D mais si tu peint une pasteque en jaune, ca n'en fait pas un citron :D:D
Tout de meme on aurait pu s'attendre a ce que firefox gere lesfenetre modale... non ?
10 mai 2006 à 01:44
Pour aller plus loin, une bonne façon de forcer le passage par la fenêtre pop-up est de ne pas activer le lien ! Exemple:
[www.toto.fr lien vers toto.fr]
et dans la page se trouvant à 'url', affichée dans la fenêtre nommée 'titre'.
Nous pourrions trouver ce code (derrière une validation) :
<script type="text/javascript">
<!--
self.opener.location.assign('http://www.toto.fr/');
self.close();
-->
</script>
Mais si FireFox ne veut pas de fenêtre modale, c'est pour garantir la liberté d'action de l'utilisateur... Et tant mieux !
Une autre façon de faire une fenêtre modale ?
Essayez un truc comme ça :
<html>
</html>
IE fera du modal, FireFox refusera au deuxième clic hors de la fenêtre...
Merci FF.
9 mai 2006 à 22:42
Si tu me permet Deux petites remarques sur ton code (posté sans explications !):
Tout d'abord,la fonction if(window.showModalDialog) Ne fonctionnera que sur IE 4.0 ou plus. Ce qui soit dit en passant est fort dommage quand on sait a quel point c'est pratique. Je vais expliquer pour Mr Enter qui ne l'a pas fait precedemment, à partir de l'une des version de JavaScript (celle de IE 5 donc), il est possible de verifier l'existance d'une fonction par l'utilisation de la fonction if([fonction]) qui renverra true ou false selon que la version de JavaScript la reconnait ou pas. (Ne fonctionne pas avec FireFox !!!!!).
En outre, et comme je le disait precedemment, la fonction window.open a laquelle on affecte les variables (url,titre,'height='+hauteur+',width='+largeur+',toolbar=no,menubar=no,location=no,resizable=no,scrollbars='+scroll+',modal=yes') ne produit PAS (a l'instar de ce que le paramettre "modal=" pourrait laisser sous entendre) une fenetre modale.
Afin qu'il n'y ai pas de confusion, je vais donner un exemple de fenetre modale:
lorsque vous remplissez un formulaire, et que vous decidez de changer de page SANS soumettre le formulaire, il se peut que vous ayez a utiliser une fenetre modale pour dire par exemple "Vous allez quitter la page blablabla (...) Etes vous sur(e) ?" avec un bouton "Oui" et un bouton "Non". Il va de soit que le lien d'une page a l'autre ne doit se faire QUE si l'utilisateur clique sur "Oui". Durant l'interval de temps separant l'apparition du message et la validation du choix de l'utilisateur, le code sera mit "en attente" (d'ou l'expression "suspendre l'interpretation, meme si apliqué au web, ca ne veut pas dire grand chose)
ceci se traduirait par un lien du type:
[www.toto.fr aller vers toto.fr]
La fenetre qui s'ouvrira sera modale pour IE et attendra de savoir quelle est la valeur du return pour effectuer ou non le saut d'une page a l'autre (si return = false alors la page ne suivra pas le lien).
En revanche, le code suivant affiche bien la page attendue comme la fenetre de confirmation mais n'attend pas le return et suivra le lien quoi qu'il arrive (et avant meme que vous ayez repondu, preuve s'il en est que la fenetre n'est pas modale):
[www.toto.fr lien vers toto.fr]
Merci quand meme Rick pour ton code.
AbriBus
9 mai 2006 à 17:50
if(window.showModalDialog){
window.showModalDialog(url,titre,'dialogHeight:'+hauteur+'px;dialogWidth:'+largeur+'px;resizable:0;status:1;center:1;scroll='+scroll+';help:0');
}else{
window.open(url,titre,'height='+hauteur+',width='+largeur+',toolbar=no,menubar=no,location=no,resizable=no,scrollbars='+scroll+',modal=yes')
}
}
28 mars 2006 à 13:08
AbriBus
28 mars 2006 à 13:04
Utilisation de l'option modal ... non?
23 févr. 2006 à 15:20
J_G> showModalDialog est une foction specifique à IE 4 ou +. Donc avec FireFox, bah il te dit qu'il connait pas la fonction (puisque ce n'est pas IE)
NEVERFORGET> Ton script est bien, et il fonctionne nikel, tant que
1) soit tu est sous IE
2) soit la modalité de ta fenetre n'importe pas (window.open est une fonction javascript basic mais ne defini pas la page ouverte en tant que modale) ce qui est parfois important, nottament pour produire des messagebox en webdevelopment. L'astuce n'en reste pas moins bonne. Toutefois, si la fenetre modale n'est pas necessaire, autant utiliser window.open qui marche tout le temps, meme sous IE.
Personne n'aurait trouvé le moyen de generer un page modale avec FireFox par hazard ?
9 janv. 2006 à 13:56
28 sept. 2005 à 20:18
Euh j'aurais une petite question :
"Erreur : window.showModalDialog is not a function" ?
J'utilise FireFox est la ligne qui bug est : "window.showModalDialog('exemple.html','','dialogHeight: 400px; dialogWidth: 500px; center: Yes; help: No; resizable: No; status: No;');"
Bizare !?!
8 juin 2005 à 13:55
function modelesswin(url,mwidth,mheight){
if (document.all&&window.print) //if ie5
eval('window.showModelessDialog(url,"","help:0;resizable:0;dialogWidth:'+mwidth+'px;dialogHeight:'+mheight+'px")')
else
eval('window.open(url,"","width='+mwidth+'px,height='+mheight+'px,resizable=0,scrollbars=0")')
}
//Configurez les dimensions a la place de 490 260
modelesswin("http://www.americas-fr.com/voyages/pub-mexique.html",490,260)
</script>
J'ai trouvé ça. Ca pourra peut-être vous aider...
3 juin 2005 à 23:56
3 juin 2005 à 20:15
1 juin 2005 à 23:14
27 mai 2005 à 16:33
Merci beaucoup je cherchais depuis longtemps comment on fait mais y a t-il moyen de désactiver la croit rouge quitter
Merci de m'aider
Astuces_jeux
5 sept. 2004 à 13:20
(=vive le pdr)
7 janv. 2004 à 02:21
6 janv. 2004 à 21:19
LOL
En fait Bravo ton script est bien mieux expliqué !