2010-02-08 2 views
5

Totalement novice à propos de JS.impossible d'exécuter un javascript externe à l'aide d'un bookmarklet

Je dois utiliser un script externe qui modifie certains éléments de la page en cours en y accédant comme un marque-page.

Si je modifie le code source HTML de la page Web d'insérer le script suivant <> lignes:

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

il fonctionne très bien. Mais si je crée un javascript: bookmarklet avec les mêmes lignes, j'obtenir une page blanche avec la chaîne suivante:

[object HTMLScriptElement] 

alors, si je crée un bookmarklet ajoutant la ligne

void(null); 

aux précédents , la page Web ne disparaît pas mais le script n'est pas exécuté.

Pourquoi?

Répondre

7

Une pratique courante consiste à utiliser simplement une expression de la fonction d'auto-exécution, quelque chose comme ceci:

(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 fonction retourne undefined (pas de valeur de retour fourni) la prévention la navigation. Notez également que cela évite de créer des variables globales (telles que s) qui peuvent chevaucher d'autres variables utilisées sur la page, car toutes les variables sont créées dans la portée de la fonction anonyme.

+0

Ne fonctionne toujours pas. – chanchal1987

Questions connexes