2010-10-10 5 views
3

Salut J'essaie de faire un bookmarklet javascript qui va ajouter un lien vers une source javascript externe à une page qui est hors du domaine. Cependant, rien ne se passe lorsque je lance le bookmarklet sans erreur et le code sur la page ne change jamais. Des idées? Voici le bookmarklet que j'essaie d'utiliser. Merci pour votre temps.Comment ajouter un fichier javascript externe et exécuter une fonction via bookmarklet?

javascript:(function(){document.body.appendChild(document.createElement('script')).src='http://mycode.com/autopopulator.js';autopopulate();})(); 
+2

Vous ajoutez probablement correctement le tag de script. Je suppose que le problème est que vous devez attendre que le navigateur charge le script avant que l'appel de fonction puisse fonctionner. – Pointy

Répondre

0

Je n'ai jamais essayé de créer un bookmarklet. Mais j'ai trouvé cet exemple en ligne qui incorpore jQuery qui pourrait vous être utile.

http://www.latentmotion.com/how-to-create-a-jquery-bookmarklet/

Il explique sur la façon de créer un lien vers les fichiers JS externes et incorporer d'autres fichiers dans ce cadre, mais je pense que le genre de chose que vous recherchez est:

<a href="javascript:(function(){var head=document.getElementsByTagName('head')[0],script=document.createElement('script');script.type='text/javascript';script.src='http://www.site.com/your-javascript.js?' + Math.floor(Math.random()*99999);head.appendChild(script);})(); void 0">Your Bookmarklet Name</a> 
+0

Cela ne montre toujours aucun changement. C'est comme si cela ne changeait rien du tout sur la page. – NCX001

0

Vous devez ajouter code

  1. insère les balises de script nécessaires puis
  2. utiliser un intervalle de minuterie à répétition ment vérifier pour un objet à partir du script importé

Voici un exemple de code:

function writeTags(){ 
    //write the script tags 
} 
function check(){ 
    // example for prototype library 
    if(window.Prototype && Prototype.Version){ 
     doActualWork(); 
    }else{ 
     window.setTimeout(check, 200); 
    } 
} 
function doActualWork(){ 
    // this your actual code that requires 
    // the loaded library 
} 
writeTags(); 
check(); 
+0

Je suis curieux de savoir ce que je fais en vérifiant un objet du script? – NCX001

+0

Si vous trouvez l'objet, vous savez que le script est chargé et vous pouvez utiliser ses méthodes. c'est un contrôle courant en JavaScript quand on travaille avec des librairies –

2

Vous pouvez également y parvenir avec un rappel:

var addScript=function(filename,callback){ 
      var e=document.createElement('script'); 
      e.type = 'text/javascript'; 
      e.src = filename; 
      if(callback){ 
       e.onloadDone=false;//for Opera 
       e.onload=function(){e.onloadDone=true;callback();}; 
       e.onReadystatechange=function(){ 
        if(e.readyState==='loaded'&& !e.onloadDone){ 
         e.onloadDone=true;callback(); 
        } 
       } 
      } 
     if(typeof(e)!=='undefined'){ 
      document.getElementsByTagName('head')[0].appendChild(e); 
     } 
    } 
addScript('http://yoursite.com/js/yourScript.js',function(){functionFromYourScript();}); 

(bien sûr, vous aurez envie de optimisez ceci pour le fourrer dans un bookmarklet, mais vous avez l'idée ...)

+0

heh, il s'avère que j'en avais moi-même besoin, donc voici la version compressée (il suffit d'ajouter votre appel de fonction avec callback à la fin de ceci) javascript: var www = function (f , c) {var e = document.createElement ("script"); e.type = "texte/javascript"; e.src = f; if (typeof (e)! == "non défini") {if (c) {e.onloadDone = faux; e.onload = fonction() {e.onloadDone = true; c()}; e.onReadystatechange = fonction() {if (e.readyState === "chargé" &&! e.onloadDone) {e.onloadDone = true; c (e.innerHTML)}}} document.getElementsByTagName ("head") [0] .appendChild (e)}}; –

Questions connexes