Claveau PONX
Messages postés4Date d'inscriptiondimanche 12 décembre 2004StatutMembreDernière intervention10 novembre 2008
-
9 nov. 2008 à 13:15
Bul3
Messages postés4933Date d'inscriptionsamedi 1 juillet 2006StatutMembreDernière intervention 2 février 2015
-
10 nov. 2008 à 13:18
Bonjour !
J'utilise IE+Jscript comme GUI, massivement lié, par COM. Et, je voudrais bien essayer prototype.js
Le problème, c'est que le seul fait d'ajouter la ligne :
<script type="text/javascript" src="prototype.js"></script>
Modifie (trop) l'accès aux objets/données. Même si je n'utilise aucune des possibilités de prototype
Par exemple, un array global, auquel j'accède (lecture/écriture) sans problème, est transformé en une fonction, et ne me fournit plus qu'un accès... au code-source de la fonction !
J'ai cherché un peu sur Internet, sans rien trouver. L'idéal serait un moyen d'accéder aux données originales, en court-circuitant la délégation de prototype.
Certes, je pourrais passer par des fonctions proxies, mais cela m'obligerait à revoir trop profondémment mon code.
Si quelqu'un a une idée géniale, je suis preneur, et je l'en remercie d'avance.
Bul3
Messages postés4933Date d'inscriptionsamedi 1 juillet 2006StatutMembreDernière intervention 2 février 201516 9 nov. 2008 à 14:19
bonjour,
>>j'utilise IE+Jscript comme GUI, massivement lié, par COM
j'ai rien compris...
JScript au fond du javascript avec des exclusivités Internet Explorer
sauf cas particuliers ( j'en use et j'en abuse d'ailleurs ) ces exclusivités sont surmontables
>>GUI massivement lié par COM
mon foie, là je ne vois même pas à quoi tu fais référence !
>>un array global, auquel j'accède (lecture/écriture) sans
problème,
ben oui... un array c'est une "variable"... heureux qu'on puisse en
traiter le contenu
>> est transformé en une fonction, et ne me fournit plus qu'un
accès
>>au code-source de la fonction !
mon foie, là je ne vois même pas à quoi tu fais référence !
un array c'est un array... et prototype n'y change rien
considère que prototype, c'est une bibliothèques de fonctions,
( et pas plus ;o) et que les bases de javascript n'y sont pas
remis en cause... il ne pourrait d'ailleurs pas le faire.
>>n court-circuitant la délégation de prototype.
bah...
soit tu utilises et profite de ses fonctionnalités
soit tu n'utilise pas
soit tu utilises mais rien ne t'empêche d'y ajouter du JS "normal" et "classique"
>> je pourrais passer par des fonctions proxies
mais encore ? c'est quoi ça ?
>>Si quelqu'un a une idée géniale
on est tous géniaux sur CodesSources, mais franchement
tu nous donnes trop peu d'éléments pour t'aider à résoudre un
probable souci que tu dois avoir ! tu ne nous parles que de généralités,
avec des termes ambigües, tu philosophes plus qu'autre chose.
qu'est-ce qui ne fonctionne pas, concrètement ?
un ch'tiot extrait du code qui pose problème ?
Claveau PONX
Messages postés4Date d'inscriptiondimanche 12 décembre 2004StatutMembreDernière intervention10 novembre 2008 9 nov. 2008 à 19:25
Re !
Je vais essayer d'expliciter un peu plus, mais en résumant, pour ne pas être trop long.
COM, c'est une technologie de communication entre objets. C'est elle qui est au coeur d'Active-X, de OLE, Ole-automation, OCX, etc.
Lorsque l'on pilote Internet-Explorer via Ole-automation, depuis un langage quelconque, les objets du DOM, et les objets globaux de JScript deviennent accessibles au langage appelant, en tant que propriétés de l'objet IE.
Je pratique souvent cela, depuis Python, Autoit, JScript (de CScript), ObjectPAL, etc.
Voici un petit exemple :
Le fichier C:\titi.htm, contenant le JScript :
<html>
<script language="JavaScript" type="text/javascript">
montableau = new Array(111,222,333,444);
function visu(txt){
alert(txt +":"+montableau);
}
</script>
</html>
Jusque là, ça marche. Le lien COM qui lie win (dans Python) avec window (dans JScript) transmet bien les propriétés comme montableau ou visu()
Le problème.
Si je rajoute, dans titi.htm, cette ligne :
<script language="JavaScript" type="text/javascript">
Voilà ce que donne ensuite print win.montableau[1] :
"function(item, i) {
i || (i = 0);
var length = this.length;
if (i < 0) i = length + i;
for (; i < length; i++)
if (this[i] === item) return i;
return -1;
}"
La transformation est bien le fait de prototype.js ; d'ailleurs, si j'enlève la ligne, ça refonctionne correctement.
Claveau PONX
Messages postés4Date d'inscriptiondimanche 12 décembre 2004StatutMembreDernière intervention10 novembre 2008 9 nov. 2008 à 19:33
Oups !
La ligne rajoutée, qui pose problème, c'est :
<script type="text/javascript" src="prototype.js"></script>
(je m'étais gourré dans le copier/coller ; désolé)
Bul3
Messages postés4933Date d'inscriptionsamedi 1 juillet 2006StatutMembreDernière intervention 2 février 201516 10 nov. 2008 à 10:32
rien d'anormal dans titi.htm
dans le script python je ne peux pas réellement dire,
mais on fait l'équivalent en javascript, ça doit baigner
function lancerie(quoi) //~~ lancer Internet Explorer ~~
{ var objExplorer = new ActiveXObject("InternetExplorer.Application");
if ( objExplorer!=null )
{ objExplorer.Visible= 1;
try { objExplorer.Navigate(quoi); }
catch(erreur) { }
}
}
pour ce qui se passe ensuite avec prototype,
le "win", ou je ne sais quoi... y est redéfini ?
faudrait un spécialiste de prototype
je doute que ce soit ton tableau en lui même...
Bul [mon Site] [M'écrire]
Membre du CCC#0
Vous n’avez pas trouvé la réponse que vous recherchez ?
Claveau PONX
Messages postés4Date d'inscriptiondimanche 12 décembre 2004StatutMembreDernière intervention10 novembre 2008 10 nov. 2008 à 12:48
Re !
> je doute que ce soit ton tableau en lui même...
Je sais que prototype.js ajoute dynamiquement, dès son chargement, des méthodes au prototype de Array (entre autres modifications).
Comme Javascript est un langage qui utilise la POO par prototype, toutes les instances de Array sont affectées par ces modifications.
Résultat, Array avec prototype.js et Array sans prototype.js sont des implémentations (devenues) différentes de Array.
> faudrait un spécialiste de prototype
C'est pour cela que j'avais choisi ce forum. Il faudrait également que ce spécialiste connaisse la programmation sous Windows.
Et aussi, je doute que le concepteur de prototype.js ait pris en compte les utilisations "non-Web" de Javascript.
> l'équivalent javascript
Voici un strict équivalent du script Python présenté plus haut (à lancer de cette façon : cscript test.js) :
var ie = new ActiveXObject("InternetExplorer.Application");
ie.Navigate('file:///C:/titi.htm');
ie.Visible=1;
var win=ie.Document.parentWindow;
win.visu("Appel: "); //==> affiche "Appel: 111,222,333,444" dans IE
WScript.StdOut.Write(win.montableau[1]); //==> affiche 222
Bul3
Messages postés4933Date d'inscriptionsamedi 1 juillet 2006StatutMembreDernière intervention 2 février 201516 10 nov. 2008 à 13:18
>>prototype.js ajoute dynamiquement, dès son chargement, des méthodes au prototype de Array
certes, on fait tous ce genre de choses... mais il ne change pas l'array en lui même
mais bon... ne connaissant pas du tout prototype ( et ne voulant pas trop connaitre, pour l'instant )...
Bul [mon Site] [M'écrire]