2008-08-12 15 views
41

Je pense que la raison pour laquelle je ne peux pas le faire parce que cela pourrait être un énorme trou de sécurité, mais ici va ...Ajouter un signet qui est seulement javascript, pas une URL

Je veux avoir un signet sur mon navigateur (FF3, de préférence) qui est seulement un extrait de code javascript. Il construirait simplement une URL basée sur la date actuelle, puis ferait un window.location = sur cette URL. Je sais que je pourrais faire une page et la conserver sur ma machine locale et y faire référence, mais je me demandais si vous pouviez contourner cette étape et avoir réellement la "localisation" du signet être javascript. J'aurais pu jurer que c'était possible il y a des années, mais je ne trouve rien qui me dise quoi que ce soit maintenant.

Répondre

54

Ce que vous voulez est un bookmarklet ils sont faciles à créer et devraient fonctionner dans la plupart des principaux navigateurs.

Edit: débordement de pile ne semble pas permettre la création bookmarklets dans le contexte du site, vous pouvez essentiellement créer un nouveau signet et tapez la commande suivante dans le champ de localisation

javascript:window.location='http://www.google.com/search?q='+Date()

pour obtenir un bookmarklet qui recherche google pour la date actuelle.

8

Eh bien, je viens de créer un signet dans FF3, est retourné et mis à jour et ajouté le test suivant:

javascript:alert('Wacky%20test%20yo'); 

Faible et voici, après que je sauvé et chargé, j'ai pu obtenir mon alerte.

Je suis sûr que vous pouvez travailler quelque chose de similaire pour vos besoins.

11

Une prise mineure. IE ne peut gérer qu'un URL de caractère dans ce format. Si vous l'enregistrez dans IE avec une URL plus longue que celle-ci, elle sera tronquée sans avertissement et donc échouera. Si vous avez besoin d'un script vraiment complexe, vous devez utiliser un bookmarklet "hébergé", dans lequel vous avez un signet court qui injecte un tag de script dans la page, pour "appeler" votre bookmarklet hébergé.

Ce n'est pas aussi agréable/portable, mais c'est la seule solution de contournement.

+5

Ainsi, le modèle de c'est quelque chose comme: javascript: (function() { document.body.appendChild (document.createElement ('script')) .src = 'http: //www.yoursite.com/js/bookmarklet.js';})(); – Shermozle

+0

correct. Vous avez juste besoin de charger le contenu du script que vous voulez d'un autre site. – scunliffe

9

Google Bookmark

javascript:(function(){var%20a=window,b=document,c=encodeURIComponent,d=a.open("http://www.google.com/bookmarks/mark?op=edit&output=popup&bkmk="+c(b.location)+"&title="+c(b.title),"bkmk_popup","left="+((a.screenX||a.screenLeft)+10)+",top="+((a.screenY||a.screenTop)+10)+",height=420px,width=550px,resizable=1,alwaysRaised=1");a.setTimeout(function(){d.focus()},300)})(); 
19

Il est intéressant de noter que vous pouvez le mettre dans une enveloppe de fonction ainsi. imranamajeed joliment illustré que pour nous ... mais apparemment je suis trop nouveau sur le site pour son poste. : P

donc pour plus de clarté:

javascript:(function(){ 
    location.href = location.href + "#"; 
})(); 

(les retours chariot n'a pas affecté la performance en chrome et IE)

+0

Oui, en l'enveloppant dans une fonction empêche la valeur de retour de jouer avec la fenêtre en cours. – mb21