2010-02-08 13 views
5

Totalmente novato sobre JS.incapaz de ejecutar un javascript externo usando un bookmarklet

Necesito usar un script externo que modifique algunos elementos en la página actual accediéndolo como un bookmarklet.

Si modifico el código fuente HTML de la página web de la inserción de los siguientes < script> líneas:

s=document.createElement('script'); 
s.type='text/javascript'; 
s.src='script.js'; 
document.getElementsByTagName('head')[0].appendChild(s); 

que trabaja muy bien. Pero si creo un javascript: bookmarklet con las mismas líneas, obtengo una página en blanco con la siguiente cadena:

[object HTMLScriptElement] 

mientras que, si se crea un bookmarklet añadiendo la línea

void(null); 

a las anteriores , la página web no desaparece pero el script no se ejecuta.

¿Por qué?

Respuesta

7

Una práctica común es usar simplemente una expresión de la función de aplicación directa, algo como esto:

(function() { 
    var s=document.createElement('script'); 
    s.type='text/javascript'; 
    s.src='script.js'; 
    document.getElementsByTagName('head')[0].appendChild(s); 
}()); 

bookmarklet:

javascript:(function(){var s=document.createElement('script');s.type='text/javascript';s.src='script.js';document.getElementsByTagName('head')[0].appendChild(s);}()); 

La función devolverá undefined (sin valor de retorno suministrado) la prevención la navegación.

Tenga en cuenta también que esto evitará la creación de variables globales (como s) que puedan solaparse con otras variables utilizadas en la página, porque todas las variables se crean en el ámbito de la función anónima.

+0

Todavía no funciona. – chanchal1987

Cuestiones relacionadas