Re kfv300,
pour répondre à ta dernière question, voici un code prêt-à-l'emploi que je vais tenter d'expliquer :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| var receveur = document.getElementById("conteneur-pub"); // je récupère l'élément dans lequel je vais insérer le lien
// je prépare le lien
var lien = document.createElement("a");
lien.target = "_blank";
// ça, tu connais ;)
var random_number = Math.random();
if (random_number < 0.5) {
lien.href = "URL_du_site_A";
lien.textContent = "site A";
} else {
lien.href = "URL_du_site_B";
lien.textContent = "site B";
}
// enfin, j'insère le lien
receveur.appendChild(lien); |
Comme tu le vois il faut que tu saches à l'avance à quel endroit dans ta page tu veux insérer ton lien. Avec les scripts de publicité, ce n'est pas forcément le cas ; je reviendrai là-dessus.
Pour cet exemple j'ai utilisé des méthodes du DOM : createElement et appendChild. Ce n'est pas le plus facile pour un débutant, mais elles sont intéressantes à connaître car elles font précisément ce qu'on leur demande. Une autre solution est d'utiliser innerHTML qui permet de taper directement du code HTML :
receveur.innerHTML = "<a href='URL_du_site_A'>site A</a>";
C'est légèrement mois efficace car le moteur JavaScript va devoir faire appel à l'analyseur HTML pour ensuite utiliser « sous le capot » les méthodes DOM. Et personnellement, je trouve qu'un script utilisant innerHTML est plus difficile à maintenir.
Pour insérer le lien comme je l'ai déjà dit, c'est mieux de connaître l'élément qui va le recevoir. Dans mon exemple j'ai supposé qu'il existait dans la page une <div id="conteneur-pub"></div>. Si tu proposes ton code publicitaire à des développeurs tiers, tu peux leur imposer d'avoir tel ou tel élément avec tel ou tel id dans leur page, mais ils trouveront ça contraignant.
Il y a toujours la vieille solution d'utiliser document.write(), mais elle est déconseillée.
Le mieux est de détecter l'emplacement grâce à… la balise script qui inclut justement ton script.
1 2 3 4 5
| var script = document.currentScript;
var receveur = script.parentNode;
// ensuite, on connaît la chanson
receveur.appendChild(lien); |
Pour faire plus court :
document.currentScript.parentNode.appendChild(lien);
Il reste un dernier problème : les scripts que tu cherches à insérer. Ils ne sont pas exécutés quand on les insère dynamiquement. Comme l'a dit Sylvain, il va falloir que tu fasses du script loading. Je te renvoie à son post…
Partager