Ecriture des bookmarklets authentication Swap menu

Les frames

Détection des frames

frames.length donne le nombre total de frames, y compris les iframes.
Pour détecter la présence d'un frameset, il faut comparer ce nombre au nombre d'iframes du document, comme:

if(frames.length > document.getElementsByTagName('iframe').length)  
	alert('Ce bookmarklet ne fonctionne pas avec les frames!');
else{  
	/* Votre code ici */
}

Traverser un frameset

Il faut tenir compte de 2 choses:

de frames et d'iframes et ainsi de suite.

On pourra traverser le frameset en écrivant un code comme

function traverse(w){
	try{
		/* Traiter ici w.document */
		for(var i=0; i<w.frames.length; i++){
			traverse(w.frames[i]);  
		}  
	catch(e){
		/* on arrive ici quand on a une frame d'un autre domaine, e est l'erreur détectée à traiter ou à ignorer */  
	}
}
traverse(window);

Utilisation d'une fonction anonyme

En plaçant votre code dans une fonction anonyme (function(){...})() et en déclarant vos variables localement à l'aide de var, il n'y aura aucune collision entre votre code et le code du document.

(function(){
	...  
	var i=5;  
	var lnks=document.links;  
	document.links[0].href='http://www.ilu.be/';  
	...
})()

Vous utiliserez une variable locale (non précédée de var) pour communiquer avec le code du document ou avec un autre bookmarklet.

Inclusion d'un script externe

Si votre script dépasse la taille limite imposée par votre navigateur, vous pouvez héberger votre script dans un fichier *.js et charger votre script comme suit:

(function(){
	document.body.appendChild(document.createElement('script')).src='http://www.ilu.be/.....';
})()

Utilisation du DOM

Il est pratique d'affecter la lettre d au document:
var d = document;

Pour créer un div r:
var r = d.createElement('div');

Pour affecter un style à r:
r.style.width = '100%'; etc ...
les traits-d'union sont retirés et la lettre suivante mise en majuscule:
r.textAlign = "left";

Pour affecter une id à r:
r.id = "mondiv";

Pour mettre du html dans r:
r.innerHTML = "code html...";

Pour insérer le div dans le document à la fin du body:
d.body.appendChild(r);

Pour insérer le div dans le document au début du body:
d.body.insertBefore(r,d.body.firstChild);

Pour retirer un div du document:
r.parentNode.removeChild(r);

Pour retrouver le div ou un autre élément à partir de son id:
r var r = d.getElementById('mondiv');

Valid XHTML 1.0 Strict Valid CSS

AccueilPage précédenteHaut de pagePage suivante