2009-12-19 13 views
5

Estoy escribiendo algunos bookmarklets para un proyecto en el que estoy trabajando actualmente y me preguntaba cuál era la mejor práctica para escribir un bookmarklet. He hecho un poco mirando a su alrededor y esto es lo que me ocurrió conCuál es la mejor práctica para escribir 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) 
    })()) 

sentí esto es bueno porque el código siempre se puede cambiar (desde su solicita cada vez) y todavía actúa como un bookmarklet. ¿Hay algún problema con este enfoque? ¿Incompatibilidad con el navegador, etc.? ¿Cuál es la mejor práctica para esto?

+0

Este artículo proporciona una plantilla bookmarklet que me queda bien http://www.latentmotion.com/how-to-create-a-jquery-bookmarklet/ –

+0

Aquí hay un enlace alternativo que he usado anteriormente. http://benalman.com/code/test/jquery-run-code-bookmarklet/ –

Respuesta

3

Se ve bien. Pero si su archivo js ya está en la memoria caché, no se solicitará en todo momento. ¿Entonces lo necesitarías para anexar? + nueva fecha() a su atributo src para garantizar que se solicite todo el tiempo.

+0

Es cierto. ¡¡Estoy de acuerdo!! –

7

Ese bookmarklet agregará una nueva copia de la secuencia de comandos al documento cada vez que se ejecuta. En el caso de las páginas de larga duración (por ejemplo, Gmail), esto podría sumar mucho uso de la memoria, y si cargar el script tiene efectos secundarios, se producirán varias veces. Una mejor estrategia sería la de darle a su escritura un id, y comprobar la existencia de ese elemento en primer lugar, por ejemplo .:

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. Otra alternativa es mantener el script existente si ya está en el documento. Esto podría ahorrar algo de tráfico del servidor si tu bookmarklet se usa con frecuencia entre recargas de página. El peor caso es que alguien está usando una versión anterior de su script por un tiempo; si no esperas que cambie a menudo, eso podría estar bien.

Cuestiones relacionadas