11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous,

Je recontre actuellement un problème de manipulation du DOM avec IE (oui oui, encore un) : visiblement, IE n'accèpte pas de faire un appendChild sur une balise "<script ...>".

<script type="text/javascript" id="javascriptId"></script>
<script type="text/javascript">
var e = document.getElementById("javascriptId");
e.appendChild(document.createTextNode("du code javascript"));
</script>

Lors de l'exécution, IE 6 et 7 affichent : "demande d'accès à la méthode ou aux propriétés inatentue." (sur la ligne e.appendChild...), alors que cela fonctionne parfaitement sous firefox et opéra.

Existe-il une façon de contourner ce pb ? ou une autre façon de générer dynamiquement (en javascript) du code javascript ?

Merci
Hello,

J'avoue que je ne comprends pas ce que tu veux faire, ça me parait tiré par les cheveux.

Pourrais-tu nous décrire le contexte de ton problème ? Parce que je ne vois pas ce que tu pourrais faire en ajoutant du code javascript dynamiquement que tu ne pourrais pas faire en l'écrivant directement.
Oui, je comprend que ce que je souhaite faire semble quelque peu capilotracté, peut-être d'ailleur que je me complique la tâche inutilement ?

En fait, ma page est un quiz, et le code javascript que j'essai d'inserré contient tout ce qu'il faut pour corriger le quiz et donc les bonnes réponses.
Aussi, pour décourager le petit malin qui voudrait trouver les réponses dans le source de la page, je "brouille" (en le compactant et URLencodant) le code javascript pour le rendre difficilement lisible.

J'ai donc du code javascript du style :

var source = function%20a%28b%2C%20c%2C%20d%2C%20e%29%7B%0Athis.f%20%3D%20b%3B%0Athis.c%20%3D%20d%3B%0

Et je doit donc l'ajouter à ma page en utilisant :

unescape(decodeURI(source));


Je sais bien que de toute façon le code source ne pourra JAMAIS être complètement protégé, mais je souhaite juste rendre la lecture de celui-ci un peu difficile.

Mais il y a sûrement mieux à faire Smiley confus

Merci
Modérateur
Salut,

Je te donne une autre façon... Ici, tu ajoutes une balise script contenant... un script :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
					  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
		<title>Exemple</title>
		<script type="text/javascript">//<![CDATA[

function Init(){

	var oScript = document.createElement('script');
	oScript.type = 'text/javascript';
	oScript.src= 'ajoutScript.js';
	var oHead = document.getElementsByTagName('head')[0];
	oHead.appendChild(oScript);
		
};
window.onload = Init;

		//]]></script></head><body></body></html>


ajoutScript.js
alert('coucou');


Eldebaran a écrit :
Parce que je ne vois pas ce que tu pourrais faire en ajoutant du code javascript dynamiquement que tu ne pourrais pas faire en l'écrivant directement.
Diminuer le poids de la page au lancement. Ce n'est pas le cas dans le script ci-dessus mais en gros, c'est le seul avantage que j'y trouverais.

lautux a écrit :
Mais il y a sûrement mieux à faire Smiley confus
Ben oui... Fais donc ton quizz en PHP, ce sera plus sûr. Smiley ravi
Modifié par koala64 (12 Dec 2006 - 14:55)
Merci de ta réponse koala64,

Pour la solution PHP, oui biensûr, ce serait parfait, mais ce quiz doit pouvoir être exécuté de façon autonome, depuis un CD par exemple et SANS accès WEB Smiley decu

Sinon, le fait de mettre le code "sensible" dans un fichier externe n'apporte pas grand chose à mon avis...

Encore merci pour votre aide
Tu peux tout simplement utiliser eval :
eval(unescape(decodeURI(source)));
Mais il faut avoir conscience que, comme le dit koala64, ton info ne sera jamais protégée efficacement côté client. La seule solution sûre sera côté serveur.
Y'a quand même moyen d'être un peu malin même côté client : p.ex. enregistrer les réponses dans un fichier binaire à récupéerer avec xhr... ça vaut pas le php bien sûr (rien ne peut égaler une protection serveur) mais ça va en décourager plus d'un.
Le problème en fait, c'est que, quelle que soit la protection utilisée, il suffit à quelqu'un de trouver l'endroit où la valeur est utilisée, d'y placer un "alert", et le tour est joué...

Pour être un peu plus sioux, on peut éventuellement crypter la réponse donnée par l'utilisateur et la comparer à la réponse stockée (cryptée elle aussi), à condition bien sûr d'avoir un algo adéquat.

<edit>xhr ça marche en local ?</edit>
Modifié par Eldebaran (12 Dec 2006 - 18:14)
Modérateur
Eldebaran a écrit :
<edit>xhr ça marche en local ?</edit>
Oui... si tu lances ton serveur... Smiley lol
koala64 a écrit :
Oui... si tu lances ton serveur... Smiley lol
Arf...

Quand je dis "en local", je parle de l'ouverture d'un fichier HTML sur le filesystem (comme dans l'exemple précédent du CD) et non de l'accès à un serveur en local (dans ce cas-là, je ne vois la différence avec un serveur distant). Smiley langue
Modifié par Eldebaran (12 Dec 2006 - 19:20)
koala64 a écrit :
Ben il n'y en a pas... pour qu'une requête fonctionne, c'est nécessaire...
Oui, c'est bien ce qu'il me semble, mais comme QuentinC évoquait cette possibilité, je me posais la question.
Au fait, rien ne t'empêche de mettre un mini serveur web embarqué sur le CD et de le démarrer automatiquement. Je sais qu'il existe des serveurs locaux type easyphp qui prennent moins de 1 Mo d'espace et qui sont démarrés très rapidement.
Notons au passage qu'il suffit de copier-coller les fichiers d'easyphp (sans installation donc) pour qu'il puisse fonctionner sur le CD, il suffit juste d'adapter les chemins d'accès dans la config. Mais bon je comprends, il fait quand même 10-15 Mo et il met quand même une trentaine de secondes à démarrer.
QuentinC a écrit :
Au fait, rien ne t'empêche de mettre un mini serveur web embarqué sur le CD et de le démarrer automatiquement. Je sais qu'il existe des serveurs locaux type easyphp qui prennent moins de 1 Mo d'espace et qui sont démarrés très rapidement.
Oui, c'est vrai. D'ailleurs, certains logiciels utilisent un système similaire pour leur aide (Eclispe entre autres me semble-t-il).