2009-12-19 8 views
5

J'écris des bookmarklets pour un projet sur lequel je travaille actuellement et je me demandais quelle était la meilleure pratique pour écrire un bookmarklet. Je l'ai fait un peu à la recherche autour de ce qui est ce que je suis venu avecQuelle est la meilleure pratique pour écrire des bookmarklets?

javascript:void((function() 
    { 
    var%20e=document.createElement('script'); 
    e.setAttribute('type','text/javascript'); 
    e.setAttribute('src','http://someserver.com/bookmarkletcode.js'); 
    document.body.appendChild(e) 
    })()) 

Je me sentais bien parce que c'est le code peut toujours être changé (depuis sa demande à chaque fois) et encore il agit comme un bookmarklet. Y a-t-il des problèmes avec cette approche? Incompatibilité du navigateur, etc. Quelle est la meilleure pratique pour cela?

+0

Cet article fournit un modèle de bookmarklet qui me va bien http://www.latentmotion.com/how-to-create-a-jquery-bookmarklet/ –

+0

Voici un lien alternatif que j'ai déjà utilisé. http://benalman.com/code/test/jquery-run-code-bookmarklet/ –

Répondre

3

Cela semble OK. Mais si votre fichier js est déjà mis en cache, il ne sera pas demandé à chaque fois. Donc vous en auriez besoin pour ajouter '?' + new Date() à votre attribut src pour s'assurer qu'il est demandé à chaque fois.

+0

True. Je suis d'accord!! –

7

Ce bookmarklet ajoutera une nouvelle copie du script au document chaque fois qu'il est exécuté. Pour les pages à longue durée de vie (par exemple, Gmail), cela peut entraîner une utilisation importante de la mémoire et, si le chargement de votre script a des effets secondaires, il se produira plusieurs fois. Une meilleure stratégie serait de donner votre script un identifiant, et vérifier l'existence de ce premier élément, .: par exemple

var s = document.getElementById('someUniqueId'); 
if (s) { 
    s.parentNode.removeChild(s); 
} 
s = document.createElement('script'); 
s.setAttribute('src', 'http://example.com/script.js'); 
s.setAttribute('type', 'text/javascript'); 
s.setAttribute('id', 'someUniqueId'); 
document.body.appendChild(s); 

N.B. une autre alternative est de conserver le script existant s'il est déjà dans le document. Cela pourrait économiser du trafic serveur si votre bookmarklet est fréquemment utilisé entre les rechargements de page. Le pire des cas est que quelqu'un utilise une ancienne version de votre script pendant un certain temps; Si vous ne vous attendez pas à ce que cela change souvent, ça pourrait aller.

Questions connexes