Utilisation de Script externe

Fermé
Marden - 11 févr. 2001 à 19:46
PhP Messages postés 1770 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 - 22 févr. 2001 à 16:59
Salut à tous,
Nouveau venu au Html (depuis Noël) et sur "CCM" encore plus récemment, je m'écris quelques pages incorporant du JavaScript en m'inspirant de divers développements passés, notamment en Rexx (sur Big Blue). Ces 2 langages, interpétés, présentent beaucoup d'analogies, avec au moins 2 différences importantes, mais plaidant à mon avis, en faveur du second :
1 - les données Rexx ne sont pas typées (tous les contenus sont des chaînes), le contenu est seulement vérifié selon les instructions où il intervient. Pour les opérations arithmétiques, le contenu doit être un nombre entier ou flottant, pour les opérations logiques, le contenu doit être 1 (vrai) ou 0 (faux).
2 - il existe dans Rexx un opérateur de concaténation "//" distinct de l'opérateur d'addition.
J'ai par exemple été surpris, dans un traitement de date, de voir qu'une opération "10 + 1" donnait "101" (un peu grand pour un numéro de mois dans l'année !). J'ai résolu le problème par l'emploi de "parseInt".
La mise au point des scriptes ne paraît pas toujours aisée : un message du genre "vous avez fait une erreur quelque part" ne me paraît pas idéal pour trouver cette erreur.
Les cours sur lesquels je me suis appuyé sont souvent redondants, de même que les "trucs et astuces". J'y ai quand même trouvé des choses intéressantes, et je remercie tous ceux qui se sont donnés la peine de faire partager leur savoir. Au vu de mes lacunes, j'ai décidé pour l'instant de ne pas me lancer dans les feuilles de style .
Après ce long avant-propos, j'en viens à mon problème :
J'ai écrit une page traitant de mots-croisés, qui pour un problème, comprend d'une part, les données (solutions + cases noires et définitions), et le traitement (mise en correspondance des données, affichages, saisie, effacement, solution). La grille est fixe (9 lignes x 11 colonnes). Les cases sont des boutons contenant soit "?" (vide), soit "#" (case noire), soit "X" (majuscule solution). En cliquant sur une case, on affiche 1 ou 2 définitions horizontale et verticale, et les 2 mots [partiellemnt] trouvés.
Je voudrais donc savoir si :
1ère solution : la partie variable (le problème) peut être définie dans un Script externe (1 grille par script), appelable dynamiquement.
2ème solution : l'ensemble des grilles et le mécanisme de sélection peut être contenu dans ce script, seul fichier à mettre à jour pour incorporer de nouvelles grilles.
ultéreurement : grille variable avec la taille de la solution.
----------------------------------------------------------------------------
Parmi les scriptes que j'ai écrits :
- calcul de "n" couleurs RGB, dans l'ordre de l'arc-en-ciel (du bleu au violet)
- affichage de couleurs (boutons "00","10","20", ... "F0","FF")
à chaque modification d'1 ou des 3 composante)
- jeu façon "Le Compte est Bon" (avec ou sans chrono)
- jeu façon "Le Mot le plus long" (avec petit pb sur la RàZ du chrono)
- un algo tout simple de tirage aléatoire (de 0 à n-1) où chaque numéro ne sort qu'une fois par séqence de "n" tirages.
A votre disposition.
Amicalement,
Marden.
A voir également:

3 réponses

PhP Messages postés 1770 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
12 févr. 2001 à 17:46
Slt Marden,

Pour la cause de Javascript ...

Je ne connais pas du tout Rexx, mais par contre je trouve que Javascript est plutôt un bon langage.

C'est un langage faiblement typé (contrairement au C ou C++) mais un petit peu qd même. Disons qu'il aime bien faire la distinction entre les nombres, les chaînes et les objets (pointeurs).
Ce que je trouve tout à fait normal. De + il effectue pratiquement presque tous les transtypages de manière automatique.
Bien sûr il y a forcement qlqles cas où il faut faire appelle à
parseInt() ou encore à toString() mais c'est normal.
Par ex si on a

var a="abcd"
var b=10

var c=a*b+10

Je préfère qu'il y ait une erreur plutôt qu'un truc du genre : "j''interprète la variable [a] après transtypage comme valant zéro et je retourne 10 !"

De plus JS supporte la programmation objet, l'héritage simple via la propriété PROTOTYPE (pas l'héritage multiple mais est-ce un mal ?), la surcharge des fonctions et ceci avec une facilité déconcertante (plus simple qu'en C++ en tout cas) ! Depuis que j'ai appris à les utiliser,cad depuis novembre 2000 à peu près, JS a pris une tout autre dimension. J'ai par ex implémenté la gestion d'un arbre dans lequel je stocke tous les objets dont j'ai besoin puis ensuite je parcours cet arbre. D'ailleurs je crois que JS sais également gérer la récursivité bien que je ne l'utilise pas.

Grâce aux objets on peut accèder à toutes les propriétés des objets que met en place le navigateur dont les feuilles de style qui sont vraiment très puissantes.

On peut accèder au varaible d'une page, ça me paraît être évident, mais en + on peut accèder aux variables (au sens large variables globales, objets, propriétés etc) des autres pages html ouvertes à condition bien sûr que tu possèdes un pointeur sur la fenêtre.

Avec JS on peut vraiment presque tout faire .

Deux sites que je trouve très bien sur JS (en anglais) :
http://www.wsabstract.com
http://www.dynamicdrive.com


Qd au pb de débugage, depuis que j'ai installé FP 2000, j'ai l'éditeur HTML de MS (le seul petit pt qui me chagrine c'est qu'à aucun moment je ne demandé l'installation de cet éditeur mais bon passons) qui s'ouvre et qui donne tout le détail du code, l'endroit où ça plante, le contenu de tous les objets avec leurs propriétés, l'arborescence mise en place dans le cadre du modèle DOM. Bref tout ce qu'il faut ! Grâce à lui j'ai même trouvé des propriétés non documentées (remarque j'ai peut-être mal cherché !).

Pour ton problème, je dois t'avouer que je n'ai pas tout compris entres les "X" les "#" et les "?".
As-tu un site sur lequel je puisse voir à quoi ça ressemble (même un prototype) ?


Sur ce :-)
@+

Philippe
0
PhP Messages postés 1770 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
21 févr. 2001 à 17:31
Slt Marden,

Je comprend mieux depuis ton mail.

Un script externe n'est ni plus ni moins qu'un fichier qui est chargé au moins 1 fois en même temps que la page html proprement dite.
Ensuite si d'autres pages html y font référence il n'est plus systèmatiquement rechargé (du moins j'espère sinon où est l'intérêt !).

Les scripts externes portent en génral l'extension .js, bien que cela ne soit pas une obligation.

Le code du script externe est simplement inséré dans la page html lors de son chargement.

Pour info cela se présente ainsi dans une page html :

<html>
<head>
<script language="JavaScript" type="text/javascript" src="mon_script.js"></script>
</head>
<body>
...
</body>
</html>


Je pense qu'on doit aussi pouvoir l'insèrer directement à l'intérieur du tag <body>

L'insertion n'a lieu qu'une et une seule fois lors du chargement : il n'est donc pas envisagable d'insèrer dynamiquement un autre script une fois la page chargée.

Ceci est dû au fait qu'HTML est avant tout un langage de description de page et qu'il n'a pas été conçu pour permettre la modification dynamique des éléments qui composent chaque page.
Le DHTML apporte un + mais c'est pas encore çà ... [:(

Pour ce qui est du traitement proprement dit il est clair qu'on peut écrire un script générique et ce quelquesoit la taille de la grille et le mettre à part. On peut inclure plusieurs scripts externes dans une même page html donc ce n'est pas gênant.

Pour les données, donc l'ensemble des définitions et des solutions plus quelques infos relatives à chaque grille, c'est plus compliqué :

Solution 1 : on stocke le tout dans un second script externe, mais cela risque d'augmenter les temps de chargement au fur-et-à mesure qu'on ajoute des nouvelles grilles.

Solution 2: on charge dynamiquement le script à chaque fois qu'on recharge la page (je précise que c'est bien toujours la même page qui est rechargée donc on n'a besion que de l'écrire une seule fois !)
le nom du script étant transmis à la page via la propriété search de l'objet location.

Le script lui même n'est plus insèré directement, ça ne marcherait pas , mais via la méthode document.write() .

Un ébauche de script pourrait être :

Page grille.htm :

<script language="JavaScript">
<!--

// On commence par récupérer le nom de la grille passé en
// paramètre :

// Retire le caractère "?", tronque la chaîne en morceaux à
// chaque fois que le caractère
// "&" est rencontré et stocke le tout ds le tableau paramArray
var paramArray=window.location.search.substr(1).split("&")

// dans paramArray[0] on a "grille=xxxxxxx"
// on récupère uniquement "xxxxx" dans la variable grille cad
// tous les caratères après le 7ème sachant que 0 réprésente le
// 1er, 1 le second etc...
var grille=paramArray[0].substr(7);

// Charge le script portant le nom contenu dans la variable grille
document.write('<script language="JavaScript" type="text/javascript" src="'+grille+'.js"></script>')

// Recharge la même page en passant un nom de grille en paramètre sans l'extension .js
// La partie "grille=" n'est pas absolument obligatoire mais c'est
// plus parlant ainsi et c'est généralement comme çà qu'on fait
// De + si tu utilises un jour Php, en utilisant cette notation il
// créé automatiquement pour toi la variable qu'il nomme
// $grille avec pour valeur "xxxxx" Simpa non ?
function nouvelle_grille(grille)
{
window.location.href="grille.htm?grille="+grille;
}

// -->
</script>

Devrait fonctionner avec IE mais je ne garantie rien avec Netscape !

Evidemment il faudrait approondir, tester si un paramètre est bien présent sinon prévoir une grille par défaut ou pourquoi pas au hasard.


Solution 3 : on utilise une base de données sur le serveur du genre Php3 avec MySql et on charge les grilles dynamiquement depuis la base données.



@+

Philippe

0
Marden Messages postés 1072 Date d'inscription dimanche 11 février 2001 Statut Membre Dernière intervention 29 janvier 2006 210
21 févr. 2001 à 20:30
Bonsoir Philippe,

Merci d'avoir bien voulu te pencher sur mon problème, et pris la peine de développer les solutions à mettre en oeuvre pour le résoudre.
Je pense que je n'aurai pas trop de difficultés à mettre en oeuvre une solution qui me convienne. Trente ans de Fortran, quelques années de C (avec du Lex et du Yacc que j'ai fait exploser, il aurait fallu passer à la versio Linux !), du Rexx récemment et même du Cobol (pour Y2K), je ne vais pas me laisser embêter par du Javascript ! J'ai notamment écrit un interpréteur en Fortran incluant des traitements récursifs (!), ce qui veut dire que je suis sensibilisé aux problèmes que celà peut poser. Par exemple, je trouve que le langage des scripts Oracle n'est pas "terrible".
Pour ce qui est des langages objets, je suis plus hésitant et j'aborde prudemment les feuilles de style afin d'éviter les ... bêtises.
Pour mes mots-croisés, le bulletin où ils sont publiés paraît 3 fois par an, ce qui me laisse du temps pour choisir une solution satisfaisante. Je te tiendrai au courant.
A bientôt. Cordialement,
Marden.
0
PhP Messages postés 1770 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
22 févr. 2001 à 16:59
Slt Marden,

Après avoir fait du Cobol également (au secours!!!) j'ai appris le
C ++ (sous DOS uniquement) (très strict sur le syntaxe et fortement typé mais vraiment puissant, l'orientation objet vaut bien les 2 plus , seul petit point délicat l'héritage multiple qui peut vite donner n'importe quoi).
J'utilise aussi Windev (plutôt WinBug !) de temps en temps : c'est nul ! Sutout leur gestion des versions d'analyse ...
Par contre Delphi c'est pas mal . [:)

Au siège de ma société, ils ont acheté un IBM AS 400
(bienvenue dans la préhistoire) et ils redéveloppent en Cobol voir en RPG ... Sans commentaire ...
Heureusement que je n'y travaille pas ! [:) [:) [:) <--- ca mérite bien çà !
D'un autre côté comme je travaille avec des serveurs NT ... A quand un produit Microsoft qui marche ?

Bon laissons les jouets pour gamin en bas âge de côté et passons aux choses sérieuses :

Javascript c'est comme du C++ avec les contraintes en moins, c'est moins puissant bien sûr (c'est pas compilé) mais ca suffit largement pour le web et c'est multi-plateforme.
J'aime bien l'aspect "tout dynamique", par ex les tableaux n'ont pas de taille fixe, pas besion de gérer l'allocation/la désalloction de la mémoire. Quand on a besoin de qlque chose on l'utilise un point c'est tout.

Je l'utilise énormément pour mon (futur) site web perso. Je vais bientôt mettre la page du principe de mon forum (version betâ de chez betâ) et celle là uniquement vu que plusieurs personnes semble interessées.

Pour ce qui est des feuilles de style, tu n'es pas obligé de les utiliser : elles n'apportent pas grand chose au niveau de la programmation elle-même, par contre pour ce qui est de la mise en page alors là oui.

Dernièrement je me suis mis à Linux et j'ai installé Linux RedHat enfin un OS stable par contre va falloir sérieusement bosser le sujet !

@+
0