2009-11-08 3 views
9

Jungs Ich habe eine Frage, in der Hoffnung, dass Sie mir mit diesem helfen können. Ich habe ein Bookmarklet;Holen Sie sich die aktuelle URL aber ohne http: // Teil Bookmarklet!

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

, die URL der aktuellen Webseite nimmt und in einer anderen Website danach sucht. Wenn ich dieses Bookmarklet verwende, nimmt es die gesamte URL einschließlich http:// und sucht danach. Aber jetzt möchte ich dieses Bookmarklet so ändern, dass es nur die www.example.com oder nur example.com (ohne http://) braucht und suche nach dieser URL. Ist das möglich und kannst du mir bitte dabei helfen?

Vielen Dank! Dies sollte es

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

Antwort

7

. Das enthält nur den Hostnamen und nicht die vollständige URL.

+0

Diese 99% der Zeit arbeitet. Es funktioniert jedoch nicht, wenn die aktuelle Url z.B. "http://somesite.com/query=http: // someothersite.com/blahblah". Alle Instanzen von "http: //" werden nicht nur beim ersten Auftreten ersetzt. Funktioniert auch nicht für 'https: //'. –

+2

Es wurde behoben. Handles http/https + caseinsensitve Übereinstimmung. Ersetzt auch nur das erste Auftreten. – jitter

+0

Ok, gute Leistung. +1 –

3

Verwenden document.location.host statt document.location.href tun

+0

Ich bin nicht sicher, warum in der Welt jeder reguläre Ausdrücke vorschlägt, wenn das Standortobjekt es bereits für Sie tut, wie Gumbo vorschlug. Dokumentation ist eine großartige Sache: https://developer.mozilla.org/De/DOM/Window.location – epascarello

+1

Oh ja, es ist einfacher zu verwenden "str = location.host + location.path + location.search". Wie steht es mit der Portnummer? –

+1

@ o.k.w: Bostjan will anscheinend nur den Host und nicht die vollständige URL kennen. – Gumbo

-1

Haben Sie die Kontrolle über website.com other.example.com? Dies sollte wahrscheinlich auf der Serverseite geschehen.

In diesem Fall:

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

sollte funktionieren. Oder könnten Sie str_replace(...) verwenden, aber bewusst sein, dass das könnte Streifen ‚http: //‘ von irgendwo in der URL:

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

EDIT: oder, wenn Sie nur den Host-Namen möchten, können Sie parse_url(...) versuchen?

+0

Dies ist eine JavaScript-Frage. Dies sind PHP-Funktionen. – mAAdhaTTah

-1

Mit Javascript replace über Regex Matching:

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

ersetzen (? Https | Datei) mit Ihrer Wahl, zum Beispiel ftp, gopher, telnet usw.

+0

tatsächlich wird dies nicht für die Datei arbeiten, da das Protokoll drei Schrägstriche verwendet – jitter

+0

@jitter: "Datei" sollte nicht enthalten sein, es hat keine praktische Verwendung.Es wurde hinzugefügt, während ich den Code lokal auf meinem Computer getestet habe. Wie auch immer, ist eigentlich egal :) –

Verwandte Themen