2009-11-08 20 views
9

Chicos Tengo una pregunta, esperando que me ayuden con esta. Tengo un bookmarklet;Obtenga la url actual pero sin el http: // bookmarklet de parte!

javascript:q=(document.location.href);void(open('http://other.example.com/search.php?search='+location.href,'_self ','resizable,location,menubar,toolbar,scrollbars,status')); 

que toma la URL de la página web actual y la busca en otro sitio web. Cuando uso este bookmarklet, toma toda la URL incluida http:// y la busca. Pero ahora me gustaría cambiar este bookmarklet para que solo tome el www.example.com o simplemente example.com (sin http://) y busque esta url. ¿Es posible hacer esto y puede ayudarme con esto?

Gracias!

Respuesta

7

Esto debe hacerlo

location.href.replace(/https?:\/\//i, "") 
+0

Esto funciona 99% del tiempo. Sin embargo, no funciona si la URL actual es, por ejemplo, 'http: //somesite.com/query=http: // someothersite.com/blahblah'. Todas las instancias de "http: //" serán reemplazadas no solo por la primera ocurrencia. No funciona para 'https: //' también. –

+2

Solucionado. Maneja la coincidencia http/https + caseinsensitve. También reemplaza solo la primera aparición. – jitter

+0

Bien, buen esfuerzo. +1 –

3

Uso document.location.host en lugar de document.location.href. Eso contiene solo el nombre de host y no la URL completa.

+0

No estoy seguro de por qué en el mundo todos sugieren expresiones regulares cuando el objeto de ubicación ya lo hace por usted, como sugirió Gumbo. La documentación es una gran cosa: https://developer.mozilla.org/En/DOM/Window.location – epascarello

+1

Oh, sí, es más fácil usar "str = location.host + location.path + location.search". ¿Qué tal el número de puerto? –

+1

@ o.k.w: Bostjan aparentemente solo quiere saber el host y no la URL completa. – Gumbo

-1

¿Tiene control sobre website.com other.example.com? Esto probablemente debería hacerse en el lado del servidor.

En cuyo caso:

preg_replace("/^https?:\/\/(.+)$/i","\\1", $url); 

debería funcionar. O bien, puede utilizar str_replace(...), pero tenga en cuenta que eso puede despojar 'http: //' de algún sitio dentro de la URL:

str_replace(array('http://','https://'), '', $url); 

EDIT: o, si lo que desea es el nombre de host, podría intentar parse_url(...)?

+0

Esta es una pregunta de JavaScript; estas son funciones de PHP. – mAAdhaTTah

-1

uso de JavaScript replace a través de coincidencia de expresiones regulares:

javascript:q=(document.location.href.replace(/(https?|file):\/\//,''));void(open('http://website.com/search.php?search='+q,'_self ','resizable,location,menubar,toolbar,scrollbars,status')); 

Reemplazar (? Https | archivo) con su elección, por ejemplo, ftp, gopher, telnet etc.

+0

en realidad esto no funcionará para el archivo ya que ese protocolo usa tres barras – jitter

+0

@jitter: "archivo" no se suponía que debía incluirse, no tiene uso práctico.Fue agregado mientras estaba probando el código localmente en mi máquina. De todos modos, realmente no importa :) –

Cuestiones relacionadas