2009-12-19 11 views
5

Ich schreibe einige Bookmarklets für ein Projekt, an dem ich gerade arbeite, und ich frage mich, was die beste Vorgehensweise beim Schreiben eines Bookmarklets ist. Ich habe einige schaut sich um, und das ist, was ich mitWas ist das beste Verfahren zum Schreiben von 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) 
    })()) 

ich nach oben kam, fühlte diese schön ist, weil der Code immer geändert werden kann (da seine jedes Mal angefordert) und immer noch wirkt es wie ein Bookmarklet. Gibt es Probleme bei diesem Ansatz? Browserinkompatibilität etc? Was ist die beste Vorgehensweise dafür?

+0

Dieser Artikel bietet eine Bookmarklet-Vorlage, die gut zu mir aussieht http://www.latentmotion.com/how-to-create-a-jquery-bookmarklet/ –

+0

Hier ist ein alternativer Link, den ich vorher verwendet habe. http://benalman.com/code/test/jquery-run-code-bookmarklet/ –

Antwort

3

Sieht OK aus. Aber wenn Ihre js-Datei bereits zwischengespeichert ist, wird sie nicht jedes Mal angefordert. Du brauchst es also, um '?' + new Date() zu Ihrem Src-Attribut, um sicherzustellen, dass es jedes Mal angefordert wird.

+0

Wahr. Ich stimme zu!! –

7

Dieses Bookmarklet fügt jedes Mal eine neue Kopie des Skripts an das Dokument an, wenn es ausgeführt wird. Bei langlebigen Seiten (z. B. Google Mail) kann dies zu einer hohen Speichernutzung führen. Wenn das Laden von Skripts mit Nebenwirkungen verbunden ist, treten sie mehrfach auf. Eine bessere Strategie wäre es, Ihrem Skript eine ID zu geben und zuerst die Existenz dieses Elements zu prüfen, z. B.

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. Eine andere Alternative besteht darin, das vorhandene Skript beizubehalten, wenn es bereits im Dokument vorhanden ist. Dies kann zu einem gewissen Serververkehr führen, wenn Ihr Bookmarklet häufig zwischen dem erneuten Laden von Seiten verwendet wird. Der schlimmste Fall ist, dass jemand eine ältere Version Ihres Skripts für eine Weile verwendet. Wenn Sie nicht erwarten, dass es sich oft ändert, könnte das in Ordnung sein.

Verwandte Themen