2009-05-22 5 views
0

Je travaille sur un bookmarklet qui donne le chemin complet d'une image lorsque vous cliquez sur une image sur une page Web. L'image est ensuite téléchargée sur nos serveurs, et nous faisons des affaires.bookmarklet pour obtenir le chemin complet d'une image

Actuellement, le script analyse l'attribut src à l'aide de jQuery, puis il a une logique bête qui fonctionne habituellement, mais souvent ce n'est pas le cas.

Maintenant, je pourrais continuer à écrire du code moche pour faire un meilleur travail d'analyse de l'URL en utilisant regex et d'autres choses, mais je pense qu'il devrait y avoir une meilleure façon de le faire .. Trouver un moyen d'imiter firefox) "Clic droit => Copier l'emplacement de l'image" serait fantastique.

Voici le code js pertinent que j'ai actuellement (buggé, mais cela fonctionne généralement) .. Des idées novatrices sur la façon de mieux accomplir cela?

var imgsrc; 
$("img").click(function() { 
    imgsrc = $(this).attr("src"); 
    var url = document.URL; 

    if (window.location.pathname != "/") { 
    var pathLoc = url.indexOf(window.location.pathname); 
    url = url.substr(0, pathLoc + 1); 
    } else if (window.location.pathname.substr(0,1) == "/") { 
    url = url.substr(0, url.length - 1); 
    } 

    if (imgsrc.toLowerCase().indexOf("http://") != 0) { 
    imgsrc = url + imgsrc; 
    } 

    window.open("http://www.mycompany.com/whatever?imgsrc=" + imgsrc + ""); 
}); 

$("img").hover(function() { 
    $(this).css({'border' : '4px solid #ff0000'}); 
    }, function() {$(this).css({'border' : ''}); 
}); 

Répondre

1

Je crois que la plupart des navigateurs normalisent la SRC propriété (je veux dire la propriété DOM, pas getAttribute('src')). Donc, vous pouvez essayer:

$("img").click(function() { 
    window.open("http://www.mycompany.com/whatever?imgsrc=" + this.src + ""); 
}); 

Si cela ne fonctionne pas alors je sais pertinemment que les balises d'ancrage ont leurs HREF propriétés normalisées; cela fonctionnera certainement:

$("img").click(function() { 
    var fullSrc = $('<a/>').attr('href', this.src)[0].href; 
    window.open("http://www.mycompany.com/whatever?imgsrc=" + fullSrc + ""); 
}); 
+0

le premier a totalement travaillé et a complètement tué 10 lignes de mauvais code. Merci! –

+0

en fait, il est assez important d'échapper à votre URL .. maintenant, il fonctionne pour tout: $ ("img"). Cliquez sur (function() { window.open ("http://www.mycompany.com/whatever ? imgsrc = "+ escape (this.src) +" "); }); –

+0

@fuhrysteve, mais vous devriez utiliser encodeURIComponent() – James

0

Pour ajouter un menu au menu contextuel, vous devez créer une extension pour firefox. J'ai créé une extension pour wikipedia here: vous pourriez être intéressé par le code.

Questions connexes