Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript > Bibliothèques & Frameworks > Prototype & Script.aculo.us
Prototype & Script.aculo.us Forum d'entraide sur les frameworks Prototype et Script.aculo.us
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/08/2006, 15h23   #1
Futur Membre du Club
 
Inscription : juin 2005
Messages : 26
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 26
Points : 15
Points : 15
Envoyer un message via ICQ à T.NightGlow Envoyer un message via MSN à T.NightGlow
Par défaut [POO] Prototypes de fonctions et IE

Bonjour à tous,

Un petit problème se pose à moi : j'ai défini un jeu de fonctions prototypées sur la classe Object (mère de toutes les mères), et les appels fonctionnent très bien avec Firefox... mais voilà, niveau compatibilité avec IE, c'est la cata : "Cet objet ne gère pas cette propriété ou cette méthode".

Donc, voici un exemple de fonction :

Code :
1
2
3
4
5
6
7
8
Object.prototype.masque = function(){
  if(this.style&&this.style.visibility)
    this.style.visibility='hidden';
}
Object.prototype.affiche = function(){
  if(this.style&&this.style.visibility)
    this.style.visibility='visible';
}
Et un exemple d'appel :

Code :
1
2
3
<div id="mon_div" style="position:absolute;visibility:hidden">Test</div>
 
<a onmouseover="document.getElementById('mon_div').affiche();" onmouseout="document.getElementById('mon_div').masque();" >Afficher la bulle</a>
Il y a bien-sûr la solution de convertir ces fonctions d'Object en fonctions globales (affiche(mon_div)...), mais cela m'oblige à revoir tous les appels. J'ai une 10aine de fonctions comme ça, appelés une bonne centaine de fois... donc

Quelqu'un a une petite idée pour me dépanner ?

Merci d'avance,
T_NightGlow
T.NightGlow est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2006, 16h15   #2
Expert Confirmé
 
Avatar de FremyCompany
 
Étudiant
Inscription : février 2006
Messages : 2 532
Détails du profil
Informations personnelles :
Âge : 20

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2006
Messages : 2 532
Points : 2 903
Points : 2 903
Envoyer un message via MSN à FremyCompany
Sur IE, seul les objets javascripts héritent de Object...
Les objets venant du "serveur" ou navigateur ne sont pas des objets javascript
__________________
Fremy
Pour vos développements Web et une navigation agréable, le tout gratuit :
1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey
FremyCompany est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2006, 16h48   #3
Futur Membre du Club
 
Inscription : juin 2005
Messages : 26
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 26
Points : 15
Points : 15
Envoyer un message via ICQ à T.NightGlow Envoyer un message via MSN à T.NightGlow
Oki...

Donc y'a moyen de prototyper mes méthodes sur un autre objet que "Object" ? Genre "HTMLElement" mais qui marcherait ? ("HTMLElement n'est pas défini" pour notre ami IE...)

Il n'empéche qu'un "alert(document.getElementById('mon_div'));" affiche un joli "[Object]" ? IE et les standards...

Ca m'embête surtout pasque ça marche nickel avec Firefox et que je dois quand même assurer la compatibilité de mon appli avec IE...
T.NightGlow est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2006, 16h55   #4
Membre confirmé
 
Avatar de NeHuS
 
Inscription : décembre 2004
Messages : 343
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 343
Points : 267
Points : 267
Je n'ai qu'une chose a dire :

Bienvenue dans le monde du dev Web

>> ie , ffx ... toute une histoire , meme si tu geres les recommandations du w3c tu peut etre sur d'avoir des merdes...

J'aimerais bien etre dans le futur quand tout sera standardisé !
NeHuS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2006, 19h05   #5
Futur Membre du Club
 
Inscription : juin 2005
Messages : 26
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 26
Points : 15
Points : 15
Envoyer un message via ICQ à T.NightGlow Envoyer un message via MSN à T.NightGlow
MDR

En plus, je travaille sous Win2K Server, donc j'peux même pas me rabattre sur IE7 qui devrait être plus flexible...
Bref...

Pas de solution, vous pensez ?
T.NightGlow est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2008, 09h51   #6
Invité de passage
 
Inscription : janvier 2006
Messages : 12
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 12
Points : 3
Points : 3
As tu trouvé une solution à ton probleme car je bloque aussi la dessus ?

Merci d'avance pour ta reponse.
cetoto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2008, 10h35   #7
Futur Membre du Club
 
Inscription : juin 2005
Messages : 26
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 26
Points : 15
Points : 15
Envoyer un message via ICQ à T.NightGlow Envoyer un message via MSN à T.NightGlow
J'ai pris le problème à l'envers, puisqu'il est insoluble avec IE :

- Etant donné le contexte du projet, je recommande à mes clients d'utiliser firefox ;
- J'ai créé une fonction "affiche(id)" et une "masque(id)" qui retrouve les objets par l'id et change la classe CSS pour passer d'un objet masqué à un objet affiché et inversement.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function masque(mon_id){
  var mon_obj=document.getElementById(mon_id);
  if(mon_obj.className=='info_bulle_v')
    mon_obj.className='info_bulle';
  else if(mon_obj.style&&mon_obj.style.visibility)
    mon_obj.style.visibility='hidden';
}
function affiche(mon_id){
  var mon_obj=document.getElementById(mon_id);
  if(mon_obj.className=='info_bulle')
    mon_obj.className='info_bulle_v';
  else if(mon_obj.style&&mon_obj.style.visibility)
    mon_obj.style.visibility='visible';
}
Les fonctions sont pas complétement "sécurisées" contre les erreurs (objets introuvables etc...) mais je ne les appelle que quand je suis sûr qu'elles s'executeront

Pour sécuriser, tu peux rajouter :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function masque(mon_id){
  var mon_obj=document.getElementById(mon_id);
  if(mon_obj){
    if(mon_obj.className=='info_bulle_v')
      mon_obj.className='info_bulle';
    else if(mon_obj.style&&mon_obj.style.visibility)
      mon_obj.style.visibility='hidden';
  }
}
function affiche(mon_id){
  var mon_obj=document.getElementById(mon_id);
  if(mon_obj){
    if(mon_obj.className=='info_bulle')
      mon_obj.className='info_bulle_v';
    else if(mon_obj.style&&mon_obj.style.visibility)
      mon_obj.style.visibility='visible';
  }
}
N.B. : Si tu n'utilise pas de classes CSS, cela fonctionne aussi (mais il y aura des lignes superflues)

Les classes CSS (allégées) :
Code :
1
2
3
4
5
6
7
8
.info_bulle{
   visibility='visible';
   position='absolute';
}
.info_bulle_v{
   visibility='hidden';
   position='absolute';
}
T.NightGlow est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2008, 15h32   #8
Invité de passage
 
Inscription : janvier 2006
Messages : 12
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 12
Points : 3
Points : 3
Merci pour ta reponse mais j'aimerai bien trouver une solution à ce probleme. Créer des function en passant l'object en paramettre c bien mais il serait preferable de pouvoir faire des prototypes.
cetoto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2008, 19h02   #9
Expert Confirmé
 
Avatar de FremyCompany
 
Étudiant
Inscription : février 2006
Messages : 2 532
Détails du profil
Informations personnelles :
Âge : 20

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2006
Messages : 2 532
Points : 2 903
Points : 2 903
Envoyer un message via MSN à FremyCompany
Citation:
Envoyé par cetoto Voir le message
Merci pour ta reponse mais j'aimerai bien trouver une solution à ce probleme. Créer des function en passant l'object en paramettre c bien mais il serait preferable de pouvoir faire des prototypes.
Ce serait préférable mais ce n'est pas possible...

Enfin si, c'est possible, mais faut faire du HTC...

CSS à ajouter :
Code :
1
2
3
* {
  behavior: url(addSomeFunction.htc);
}
Source du fichier HTC : [EDIT=this>>element]
Code :
1
2
3
4
5
6
7
8
9
10
11
12
<method name="show" />
<method name="hide" />
<script type="JScript"><!--
 
function show() {
  element.runtimeStyle.display="block";
}
 
function hide() {
  element.runtimeStyle.display="none";
}
--></script>
Attention, un élément ne dispose des méthodes show/hide que si il est DANS le document.
Code :
1
2
3
4
var e = document.createElement("e");
// Pas encore de méthode show/hide
document.body.appendChild(e);
// Méthode show/hide ajoutée
__________________
Fremy
Pour vos développements Web et une navigation agréable, le tout gratuit :
1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey
FremyCompany est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2008, 16h50   #10
Invité de passage
 
Inscription : janvier 2006
Messages : 12
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 12
Points : 3
Points : 3
Merci pour vos reponses.
cetoto est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h10.


 
 
 
 
Partenaires

Hébergement Web