[débutant] prototype.js détruit mes liens COM

Signaler
Messages postés
4
Date d'inscription
dimanche 12 décembre 2004
Statut
Membre
Dernière intervention
10 novembre 2008
-
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
-
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.

--
MCI

 

6 réponses

Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
11
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 ?

Cordialement

          Bul [mon Site] [M'écrire]         
                 Membre du CCC~0
Messages postés
4
Date d'inscription
dimanche 12 décembre 2004
Statut
Membre
Dernière intervention
10 novembre 2008

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>


 


Le script Python qui utilise titi.htm :


import win32com.client
ie=win32com.client.Dispatch('InternetExplorer.Application')
ie.Navigate('file:///C:/titi.htm')
ie.Visible=True
win=ie.Document.parentWindow
win.visu("Appel: ")    #==> affiche "Appel: 111,222,333,444" dans IE
print win.montableau[1]    #==> affiche 222


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.

J'espère avoir été plus clair.
Messages postés
4
Date d'inscription
dimanche 12 décembre 2004
Statut
Membre
Dernière intervention
10 novembre 2008

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é)

@+
--
MCI
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
11
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
Messages postés
4
Date d'inscription
dimanche 12 décembre 2004
Statut
Membre
Dernière intervention
10 novembre 2008

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
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
11
>>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]