2010-11-15 34 views
0

J'ai été inspiré par le Instapaper bookmarklets qui permet d'ajouter une page à Instapaper sans fenêtre contextuelle séparée et sans nécessiter un rechargement complet de la page. Je voudrais combiner cette idée avec un Delicious bookmarklet pour les pages de bookmarking.l'injection de jQuery, Colorbox et code personnalisé dans une page via un bookmarklet

Le jQuery Colorbox plugin prend en charge le chargement du contenu iframe dans les pop-ups colobox, ce qui semble être un bon point de départ. J'ai assemblé plusieurs bookmarklets pour obtenir le code ci-dessous, ce qui semblait bien démarrer, jusqu'à ce que j'ajoute la ligne "$.fn.colorbox ...". Je n'arrive pas à ouvrir une Colorbox. J'ai même essayé de simplifier à l'ouvrir juste hopepage Google, mais pas de chance là non plus:

javascript: 
function iprl5(){ 
    var d=document,z=d.createElement('scr'+'ipt'),y=d.createElement('scr'+'ipt'),x=d.createElement('scr'+'ipt'),b=d.body,l=d.location,t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():''); 
    try{ 
    if(!b) 
     throw(0); 
    d.title='(Saving...)%20'+d.title; 
    x.setAttribute('src','http://cachedcommons.org/cache/jquery/1.4.2/javascripts/jquery.js'); 
    y.setAttribute('src','http://cachedcommons.org/cache/jquery-colorbox/1.3.9/javascripts/jquery-colorbox.js'); 
    b.appendChild(x); 
    b.appendChild(y); 
    $.fn.colorbox({href:'http://www.delicious.com/save?url='+encodeURIComponent(window.location.href)+'&title='+encodeURIComponent(document.title)+'&v=5&',open:true,iframe:true}); 
    } 
    catch(e){ 
    alert('Please%20wait%20until%20the%20page%20has%20loaded.'); 
    } 
} 
iprl5(); 
void(0) 

Répondre

1

Les scripts sont chargés dans un thread séparé. Vous devez attendre que le script soit chargé avant de l'utiliser. Habituellement quelque chose comme ceci:

var checkIfLoaded = function(){ 
    if($.fn.colorbox){ 
     // continue your processing 
    }else{ 
     window.setTimeout(200, checkIfLoaded); 
    } 
} 
checkIfLoaded();