2008-08-12 16 views
41

Estoy pensando que la razón por la que no puede hacer esto se debe a que podría ser un enorme agujero de seguridad, pero aquí va ...Añadir un marcador que sólo es javascript, no una URL

quiero tener un marcador en mi navegador (FF3, preferiblemente) que es solo un fragmento de código javascript. Simplemente construiría una URL basada en la fecha actual y luego haría una ventana.location = en esa URL.

Sé que podría hacer una página y guardarla en mi máquina local y solo referirme a ella de esa manera, pero me preguntaba si podría omitir ese paso y realmente tener la "ubicación" del marcador realmente solo ser javascript Podría haber jurado que esto fue posible hace años, pero no puedo encontrar nada que me lo diga de ninguna manera ahora.

Respuesta

54

Lo que quiere es bookmarklet son fáciles de crear y deberían funcionar en la mayoría de los buscadores.

Editar: desbordamiento de pila parece no permitir la creación de bookmarklets en el contexto del sitio, básicamente, se puede crear un nuevo marcador y escriba lo siguiente en el campo de ubicación

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

para obtener un bookmarklet que busca en Google para la fecha actual.

8

Bueno, acabo de crear un marcador en FF3, regresó y lo actualizó y ha añadido la siguiente prueba:

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

bajo y contemplar, después de guardar y cargar, yo era capaz de conseguir mi alerta.

Estoy seguro de que puede encontrar algo similar para sus necesidades.

11

Una pequeña trampa. IE solo puede manejar una URL de carácter en este formato. Si lo guarda en IE con una url más larga que esta, se truncará sin previo aviso y, por lo tanto, fallará.

Si necesita un script realmente complejo, necesitará usar un bookmarklet "alojado", donde tiene un marcador corto que inyecta una etiqueta de script en la página, para "llamar" a su bookmarklet alojado.

No es tan agradable/portátil, pero es la única solución.

+5

Así que el patrón de esto es algo como: javascript: (function() { document.body.appendChild (document.createElement ('script')) .src = 'http: //www.yoursite.com/js/bookmarklet.js';})(); – Shermozle

+0

correcto. Solo necesita cargar el contenido del script que desee desde otro sitio. – 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

Es digno de notar que se puede poner esto en un envoltorio de la función, así. imranamajeed muy bien ilustrado que para nosotros ... pero al parecer soy demasiado nuevo en el sitio para subir su publicación. : P

así para mayor claridad:

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

(los retornos de carro no afectó a la actividad en cromo y el IE)

+0

Sí, envolverlo en una función evita que el valor de retorno se meta con la ventana actual. – mb21

Cuestiones relacionadas