

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 */
}
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);
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.
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/.....';
})()
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');