Bonjour à tous !
J'ai commencé la programmation d'un éditeur wysiwyg en JS. Jusque là tout va bien.
Mon éditeur commençant à grossir, je me suis décider à le passer en POO.. mais apparemment j'ai des difficultés pour le faire fonctionner.
Je n'ai jamais fais de POO sous JS.. je dois avoir rater un truc. Je vous donne mon code, en espérant que quelqu'un reperera l'erreur (trouvez charlie !).
Pour info, je n'ai aucune erreur JS affichée dans mon explorateur (firefox), et la version non POO marchait sans pb.
Dans la version POO, mon iframe d'édition apparait bien mais impossible de l'éditer (le curseur d'édition ne s'affiche pas..)
Voila.. si vous voulez tester pour mieux vous rendre compte, il vous faudra creer une page moniframe.html vide (<html><head></head><body></body></html>)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99 <html> <head> <title> Using execCommand to bold text </title> <script language="JavaScript"> function Editeur(){ this.nomNav; this.menu; this.zoneTexte; this.Init=initEditeur; this.InitIE=editeurInitIE; this.InitGecko=editeurInitGecko; } function initEditeur(){ this.nomNav = navigator.appName; this.menu = new Menu(); this.zoneTexte = new ZoneTexte(); this.menu.Init(this,this.zoneTexte); this.zoneTexte.Init(this,this.menu); if (this.nomNav == "Microsoft Internet Explorer"){ this.InitIE(); this.zoneTexte.iv.execCommand('liveresize',false,true); } else{ this.InitGecko(); } } function Menu(){ this.entree; this.myDivString; this.posX; this.posY; this.linktabbtn; this.myDiv; // a renommer > div du tableau dynamique this.zoneTexte; this.editeur; this.Init=initMenu; } function initMenu(ed,zt){ this.entree = true; this.posX = 0; this.posY = 0; this.linktabbtn = new Image(); this.linktabbtn.src = "linktabblue.jpg"; this.myDiv = document.getElementById('tableDyn'); this.ed=ed; this.zt=zt; } function ZoneTexte(){ this.iv; this.ifr; this.viewMode; this.editeur; this.Init=initZoneTexte; this.BoldIt=ZTBoldIt; } function initZoneTexte(ed,mn){ this.viewMode = 1; // WYSIWYG this.ed=ed; this.mn=mn; } function editeurInitGecko(){ this.zoneTexte.ifr = document.getElementById('iView'); //alert(this.zoneTexte.ifr+" : zoneTexte.ifr"); this.zoneTexte.iv = this.zoneTexte.ifr.contentDocument; //alert(this.zoneTexte.iv+" : zoneTexte.iv"); this.zoneTexte.iv.designMode = 'On'; //alert(document.getElementById('iView').contentDocument.designMode+" : zoneTexte.iv.designMode"); } function editeurInitIE(){ this.zoneTexte.ifr = iView; this.zoneTexte.iv = this.zoneTexte.ifr.document; this.zoneTexte.iv.designMode = 'On'; } function ZTBoldIt(){ this.iv.execCommand('bold', false, null); } </script> <link rel="stylesheet" type="text/css" href="style.css"> </head> <body> <iframe id="iView" style="width: 600px; height:400px" src="moniframe.html"></iframe> <br><br> <input type="button" onClick="myEd.zoneTexte.BoldIt()" value="B" /> <div id="tableDyn"> </div> <script language="javascript"> var myEd = new Editeur(); myEd.Init(); alert(document.getElementById('iView').contentDocument.designMode); document.getElementById('iView').contentDocument.body.innerHTML="haha!"; </script> </body> </html>
Partager