Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/09/2011, 21h22   #1
Membre régulier
 
Inscription : juillet 2004
Messages : 92
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 92
Points : 75
Points : 75
Par défaut delete des balises scripts en double

Bonjour a tous, j'ai un petit soucis de conception de mon script afin de shooter les balises script en trop, je ne souhaite pas utiliser de framework (jquery proto...).
Voici le début de mon script mais pour le reste je pèche même avec des setAttribute j'y parvient pas .
Merci de votre aide, et bonne soirée.
Code :
1
2
3
4
5
6
7
8
9
10
 
var bscripts = document.getElementsByTagName("script");
var bscrs = bscripts.src;
var aFilter = [];
for(var i=0;bscripts.length>i;i++){
	alert(bscripts[i].src);
	if(bscripts[i].src != ""){
		aFilter = bscripts[i].src;
	}
}

La page qui doit être néttoyé pour exemple.
Code :
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
 
<html>
<head>
<style type="text/css">
.testDiv{
	width: 250px;
	height: 250px;
	background-color: #CCCCCC;
}
.test{
	width:100px;
	height:100px;
	background-color: #CFFCFF;
}
</style>
<!-- UTILISATEUR LAMBDA -->
<script type="text/javascript" src="alert_script.js"></script>
<script type="text/javascript" src="alert_script.js"></script>
</head>
<body>
<h1></h1>
<div class="testDiv"></div>
<?php
 
?>
</body>
</html>
headmax est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2011, 21h35   #2
Membre Expert
 
Avatar de Willpower
 
Homme Boris Dessy
sans emploi
Inscription : décembre 2010
Messages : 871
Détails du profil
Informations personnelles :
Nom : Homme Boris Dessy
Localisation : Belgique

Informations professionnelles :
Activité : sans emploi

Informations forums :
Inscription : décembre 2010
Messages : 871
Points : 1 380
Points : 1 380
je n'ai pas bien compris la question mais je peux déjà te dire que ceci n'a pas beaucoup de sens :

Code :
1
2
3
 
var aFilter = [];
aFilter = bscripts[i].src;
tu déclares "aFilter" comme un tableau et puis tu remplaces ce tableau par des strings tout au long de ta boucle.

à mon avis tu voulais plutôt faire

Code :
1
2
3
 
var aFilter = [];
aFilter.push(bscripts[i].src);

sinon pour supprimer des balises scripts, une fois que tu as le bon élément en main (la balise après avoir testé tes conditions) tu peux le supprimer avec
Code :
document.getElementsByTagName('head')[0].removeChild(mon_script);
ou plus généralement s'ils ne sont pas d'office dans la balise "head" :

Code :
mon_script.parenNode.removeChild(mon_script);
Willpower est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2011, 21h44   #3
Membre régulier
 
Inscription : juillet 2004
Messages : 92
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 92
Points : 75
Points : 75
Bonsoir, désolé pour mon script dépourvu de sens, l'objectif de ce script était de tester les URL scr les comparer pour quels n'ont pas de doublon d'appel sur cette URL et si c le cas supprimer les doublons pour qu'il en reste qu'un.

Et merci mille fois pour ton explication, j'ai pas pensé du tout au dom.
Je vais tester de suite.
headmax est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2011, 22h11   #4
Modérateur
 
Avatar de NoSmoking
 
Homme
Inscription : janvier 2011
Messages : 2 944
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : janvier 2011
Messages : 2 944
Points : 4 779
Points : 4 779
Bonsoir,
cela ne te servira à rien, because une fois chargé le fichier JS est en mémoire, et en cas de doublon les dernières définitions auront pris la place des premières.

De plus si tu supprimes les références dans le DOM les fonctions restent opérationnelles

exemple :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<!DOCTYPE html>
<html lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>[...]</title>
<script src="http://code.jquery.com/jquery-latest.js" type="text/javascript"></script>
<script  type="text/javascript">
function fctTest(){
  alert( arguments.callee);
  alert( document.getElementsByTagName('SCRIPT').length);
}
</script>
<script type="text/javascript">
var tScript = document.getElementsByTagName('SCRIPT');
while( tScript.length){
  tScript[0].parentNode.removeChild( tScript[0]);
}
</script>
</head>
<body>
<button onclick="fctTest();">Test</button>
</body>
</html>
tu peux même inspecter l'arbre DOM pour vérifier.
NoSmoking est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2011, 00h08   #5
Membre régulier
 
Inscription : juillet 2004
Messages : 92
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 92
Points : 75
Points : 75
Voilà un truc qui ressemble un peu a ce que je souhaite mais là j'arrive pas a empêcher les alert("ok") .
j'aimerais que seulement une alert me parvient mais je pense qu'il va falloir taper dans un gestionnaire d'événement .
Par contre le truc chelou ce qu'il supprime pas tout mes balises scripts bizarrement.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
<!-- page control_script.js -->
window.onload = function(){
	var bscripts = document.getElementsByTagName("script");
	var url = "http:localhost/control_script.js";
	//alert(bscripts.length);
	var nbScripts = bscripts.length;
	//alert(nbScripts);
	for(var i=0;nbScripts>i;i++){
		//alert(bscripts[i].src);
		if(bscripts[i].src != "" && bscripts[i].src != url){
				document.getElementsByTagName('head')[0].removeChild(bscripts[i]);
		}
	}
};
Code :
1
2
3
4
5
6
7
 
<!-- alert_script.js -->
 
function loadme(){
	alert("ok");
}
loadme();
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
<html>
<head>
 
<!-- Page HTML -->
<script type="text/javascript" src="control_script.js"></script>
<script type="text/javascript" src="alert_script.js"></script>
<script type="text/javascript" src="alert_script.js"></script>
<script type="text/javascript" src="alert_script.js"></script>
<script type="text/javascript" src="alert_script.js"></script>
</head>
<body>
</body>
</html>
Merci de vos lumières.
headmax est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2011, 18h29   #6
Membre Expert
 
Avatar de Willpower
 
Homme Boris Dessy
sans emploi
Inscription : décembre 2010
Messages : 871
Détails du profil
Informations personnelles :
Nom : Homme Boris Dessy
Localisation : Belgique

Informations professionnelles :
Activité : sans emploi

Informations forums :
Inscription : décembre 2010
Messages : 871
Points : 1 380
Points : 1 380
Comme te l'a expliqué noSmoking, ce n'est pas vraiment possible, puisque ton code s’exécutera une fois tout le code complètement chargé et javascript ne possède pas encore le code auto-modifiable. (même si tu peux charger du code par la suite en ajoutant des balises script ou graçe à eval).

Par contre si ton seul problème réside sur la méthode "alert", tu peux surcharger la fonction "alert" pour la contrôler.

Sinon voir dans tes évènements si la fonction n'est déclenchée que certaines conditions, alors jouer avec.

Bonne chance.
Willpower est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2011, 19h02   #7
Modérateur
 
Avatar de NoSmoking
 
Homme
Inscription : janvier 2011
Messages : 2 944
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : janvier 2011
Messages : 2 944
Points : 4 779
Points : 4 779
Citation:
Envoyé par headmax Voir le message
Voilà un truc qui ressemble un peu a ce que je souhaite mais là j'arrive pas a empêcher les alert("ok") .
tu n'as qu'à te créer un "espace", exemple simple
Code :
1
2
3
4
5
6
7
8
// fichier alert_script.js
if( !window.mySpace){
  window.mySpace = true; // le prochain acces avorteront
  var maFct = function(){
    alert('Yes!');
  };
  maFct();
}
NoSmoking est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2011, 20h09   #8
Membre régulier
 
Inscription : juillet 2004
Messages : 92
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 92
Points : 75
Points : 75
Merci pour vos lumières sur ce sujet que j'aborde pour la première fois, désolé pour le manque de précision, j'ai du mal moi même a concevoir en JS ce type de module.
NoSmoking je test ton code, merci pour toute tes Lumières et merci autres biensur .
Je laisse ouvert le sujet et je posterais le résultat final.

Bonne soirée à tous.
headmax est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2011, 13h30   #9
Membre Expert
 
Avatar de Willpower
 
Homme Boris Dessy
sans emploi
Inscription : décembre 2010
Messages : 871
Détails du profil
Informations personnelles :
Nom : Homme Boris Dessy
Localisation : Belgique

Informations professionnelles :
Activité : sans emploi

Informations forums :
Inscription : décembre 2010
Messages : 871
Points : 1 380
Points : 1 380
Citation:
Envoyé par NoSmoking Voir le message
tu n'as qu'à te créer un "espace", exemple simple
Code :
1
2
3
4
5
6
7
8
// fichier alert_script.js
if( !window.mySpace){
  window.mySpace = true; // le prochain acces avorteront
  var maFct = function(){
    alert('Yes!');
  };
  maFct();
}
argh bien vu, je répond trop souvent en me concentrant sur la question précise sans penser au problème dans sa globalité.
Willpower est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2011, 22h39   #10
Membre régulier
 
Inscription : juillet 2004
Messages : 92
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 92
Points : 75
Points : 75
Citation:
argh bien vu, je répond trop souvent en me concentrant sur la question précise sans penser au problème dans sa globalité.
Soit pas si dur avec toi même, tes informations sont aussi importantes merci pour ton aide.
headmax est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h06.


 
 
 
 
Partenaires

Hébergement Web