Dies funktioniert mit URL-Zeichenfolge, wenn locationObjekt nicht verfügbar ist (js außerhalb des Browsers!)
Thamme Gowda
Die Antwort von David Calhoun verwendet den integrierten Parser (wie location), kann jedoch für jede URL verwendet werden. Schau es dir an, es ist ordentlich.
Stijn de Witt
6
Oder verwandeln Sie es einfach in einen window.location.href.split('/').slice(0, 3).join('/')
Einzeiler
und wie würden Sie dies auf dem Knoten tun?
DDD
5
window.location.origin
int soumen
576
var full = location.protocol+'//'+location.hostname+(location.port ?':'+location.port:'');
@Randomblue Was ist damit? Du wirst bekommen about://. Ich bin jedoch gespannt, wofür der Anwendungsfall wäre about:blank. Ich bin nicht sicher, ob ein Browser Plugin-Ressourcen einfügt about:blank, aber dies scheint der einzige Anwendungsfall zu sein.
Shef
3
Das funktioniert überhaupt nicht, wenn Sie eine URL-Zeichenfolge haben, oder? (dh Sie sein müssen umlocation für diese Arbeit)
Nick T
1
Entschuldigung für die späte Antwort, @NickT. Ja, das macht es nicht. Bitte verwenden Sie dazu die nette Lösung von David .
Shef
1
Diese Antwort sollte als die richtige Antwort gewählt werden. Es ist sauber und verwendet das Standard-Standortobjekt.
Mohit Gangrade
14
Kannst du nicht location.hostanstelle von location.hostname+ verwenden location.port?
c24w
180
Keine dieser Antworten scheint die Frage vollständig zu beantworten, die eine beliebige URL erfordert, nicht speziell die URL der aktuellen Seite.
Methode 1: Verwenden Sie die URL-API (Einschränkung: keine IE11-Unterstützung)
Methode 2 (alte Methode): Verwenden Sie den im DOM integrierten Parser des Browsers
Verwenden Sie diese Option, wenn Sie dies auch für ältere Browser benötigen.
// Create an anchor element (note: no need to append this element to the document)const url = document.createElement('a');// Set href to any path
url.setAttribute('href','http://example.com:12345/blog/foo/bar?startIndex=1&pageSize=10');
Das ist es!
Der eingebaute Parser des Browsers hat seine Arbeit bereits erledigt. Jetzt können Sie einfach die Teile greifen, die Sie benötigen (beachten Sie, dass dies für beide oben genannten Methoden funktioniert):
// Get any piece of the url you're interested in
url.hostname;// 'example.com'
url.port;// 12345
url.search;// '?startIndex=1&pageSize=10'
url.pathname;// '/blog/foo/bar'
url.protocol;// 'http:'
Bonus: Suchparameter
Möglicherweise möchten Sie auch die Such-URL-Parameter aufteilen, da '? StartIndex = 1 & pageSize = 10' für sich genommen nicht allzu verwendbar ist.
Wenn Sie oben Methode 1 (URL-API) verwendet haben, verwenden Sie einfach die searchParams-Getter:
link.protocol gibt mir ein "http:", wenn ich einen Anker mit "google.com" inspiziere :-(var link = document.createElement('a'); link.setAttribute('href', 'google.com'); console.log(link.protocol)
eXe
Machst du das httpvielleicht auf einer Seite? Wenn nicht angegeben, wird es vom aktuellen Standort "erben"
Stijn de Witt
4
Dies ist eine fantastische Antwort und sollte mehr Stimmen erhalten, da diese Antwort nicht nur auf den aktuellen Speicherort beschränkt ist, sondern für jede URL funktioniert und weil diese Antwort den integrierten Parser des Browsers verwendet, anstatt selbst einen zu erstellen (was wir nicht können) hoffe es genauso gut oder so schnell zu machen!).
Stijn de Witt
Danke für diesen cleveren Trick! Ich möchte eines hinzufügen: Es gibt beides hostund hostname. Ersteres enthält den Port (z. B. localhost:3000), während letzteres nur der Name des Hosts ist (z localhost. B. ).
Codener
Dies funktioniert gut bei absoluter URL. Bei relativer URL und browserübergreifendem Fehler schlägt dies fehl. Irgendwelche Vorschläge?
Gururaj
133
Aus irgendeinem Grund sind alle Antworten übertrieben. Das ist alles was es braucht:
FYI, ich bin sicher , dass dies auch in Zukunft groß sein wird , wenn alle gängigen Browser implementiert haben, jedoch ist dies nicht der Fall ist: developer.mozilla.org/en-US/docs/Web/API/... Bei Zum Zeitpunkt des Schreibens unterstützen nur neuere Versionen von Firefox- und WebKit-Browsern die Origin-Eigenschaft nach meinen Recherchen.
Hallo aus dem Jahr 2015. Leider ist URLUtils laut dieser Kompatibilitätstabelle auf MDN immer noch nicht in allen Browsern ordnungsgemäß implementiert . Es scheint jedoch, dass die Eigenschaft origin etwas besser unterstützt wird als 2013, sie ist jedoch immer noch nicht für die Produktion geeignet, da sie in Safari nicht ordnungsgemäß implementiert ist. Sorry Leute :(
totalNotLizards
Update: Wird für viele Browser immer noch nicht unterstützt (auch Safari) :( :(
Ahmad hamza
Es funktioniert auch nicht im IE, es gibt "undefined" zurück.
Siddhartha Chowdhury
53
Wie bereits erwähnt, gibt es die noch nicht vollständig unterstützte, window.location.originaber anstatt sie entweder zu verwenden oder eine neue Variable zu erstellen, überprüfe ich sie lieber und wenn sie nicht festgelegt ist, um sie festzulegen.
Wenn Sie einer älteren Frage eine Antwort mit vorhandenen Antworten hinzufügen, ist es hilfreich zu erklären, welche neuen Informationen Ihre Antwort bringt, und zu bestätigen, ob sich der Zeitablauf auf die Antwort auswirkt.
Jason Aller
8
In der Tat funktioniert window.location.origin in Browsern nach Standards einwandfrei , aber raten Sie mal. IE folgt nicht den Standards.
Aus diesem Grund hat dies in IE, FireFox und Chrome für mich funktioniert:
var full = location.protocol+'//'+location.hostname+(location.port ?':'+location.port:'');
Für mögliche zukünftige Verbesserungen, die Konflikte verursachen könnten, habe ich die Referenz "Fenster" vor dem Objekt "Standort" angegeben.
var full = window.location.protocol+'//'+window.location.hostname+(window.location.port ?':'+window.location.port:'');
Erwägen Sie, Ihre Antwort zu erklären. Gehen Sie nicht davon aus, dass das OP die Bedeutung der verschiedenen Teile Ihres Codes verstehen kann.
ADyson
3
Verwenden Sie einen regulären Ausdruck (Regex), der sehr nützlich ist, wenn Sie Inhalte validieren / extrahieren oder sogar eine einfache Analyse in Javascript durchführen möchten.
Der reguläre Ausdruck ist:
/([a-zA-Z]+):\/\/([\-\w\.]+)(?:\:(\d{0,5}))?/
Demonstration:
function breakURL(url){
matches =/([a-zA-Z]+):\/\/([\-\w\.]+)(?:\:(\d{0,5}))?/.exec(url);
foo =newArray();if(matches){for( i =1; i < matches.length ; i++){ foo.push(matches[i]);}}return foo
}
url ="https://www.google.co.uk:55699/search?q=http%3A%2F%2F&oq=http%3A%2F%2F&aqs=chrome..69i57j69i60l3j69i65l2.2342j0j4&sourceid=chrome&ie=UTF-8"
breakURL(url);// [https, www.google.co.uk, 55699]
breakURL();// []
breakURL("asf");// []
breakURL("asd://");// []
breakURL("asd://a");// [asd, a, undefined]
Jetzt können Sie auch eine Validierung durchführen.
"Ein gültiges RFC 3986-URL-Schema muss aus einem Buchstaben bestehen, gefolgt von einer beliebigen Kombination aus Buchstaben, Ziffern, Pluszeichen (" + "), Punkt (". ") Oder Bindestrich (" - ")." - Stapelüberlauf. com / a / 9142331/188833 (Hier ist eine Urne: ietf: rfc: 3897 (URI) / Urne: ietf: rfc: 3897 (IRI) Regex für das Schema: Teil einer URI / IRI in Python: github.com/dgerber /rfc3987/blob/master/rfc3987.py#L147 )
Wes Turner
2
Einfache Antwort, die für alle Browser funktioniert:
/**
* Get the current URL from `window` context object.
* Will return the fully qualified URL if neccessary:
* getCurrentBaseURL(true, false) // `http://localhost/` - `https://localhost:3000/`
* getCurrentBaseURL(true, true) // `http://www.example.com` - `https://www.example.com:8080`
* getCurrentBaseURL(false, true) // `www.example.com` - `localhost:3000`
*
* @param {boolean} [includeProtocol=true]
* @param {boolean} [removeTrailingSlash=false]
* @returns {string} The current base URL.
*/exportconst getCurrentBaseURL =(includeProtocol =true, removeTrailingSlash =false)=>{if(!window ||!window.location ||!window.location.hostname ||!window.location.protocol){
console.error(`The getCurrentBaseURL function must be called from a context in which window object exists.Yet, window is ${window}`,[window, window.location, window.location.hostname, window.location.protocol],)thrownewTypeError('Whole or part of window is not defined.')}const URL =`${includeProtocol ?`${window.location.protocol}//` : ''}${window.location.hostname}${
window.location.port ?`:${window.location.port}`:''}${removeTrailingSlash ?'':'/'}`// console.log(`The URL is ${URL}`)return URL
}
Antworten:
Holen Sie sich zuerst die aktuelle Adresse
Dann analysieren Sie einfach diese Zeichenfolge
Ihre URL lautet:
Hoffe das hilft
quelle
location
Objekt nicht verfügbar ist (js außerhalb des Browsers!)location
), kann jedoch für jede URL verwendet werden. Schau es dir an, es ist ordentlich.window.location.href.split('/').slice(0, 3).join('/')
quelle
about://
. Ich bin jedoch gespannt, wofür der Anwendungsfall wäreabout:blank
. Ich bin nicht sicher, ob ein Browser Plugin-Ressourcen einfügtabout:blank
, aber dies scheint der einzige Anwendungsfall zu sein.location
für diese Arbeit)location.host
anstelle vonlocation.hostname
+ verwendenlocation.port
?Keine dieser Antworten scheint die Frage vollständig zu beantworten, die eine beliebige URL erfordert, nicht speziell die URL der aktuellen Seite.
Methode 1: Verwenden Sie die URL-API (Einschränkung: keine IE11-Unterstützung)
Sie können die URL-API verwenden (nicht von IE11 unterstützt, aber überall verfügbar ).
Dies erleichtert auch den Zugriff auf Suchparameter . Ein weiterer Bonus: Es kann in einem Web Worker verwendet werden, da es nicht vom DOM abhängt.
Methode 2 (alte Methode): Verwenden Sie den im DOM integrierten Parser des Browsers
Verwenden Sie diese Option, wenn Sie dies auch für ältere Browser benötigen.
Das ist es!
Der eingebaute Parser des Browsers hat seine Arbeit bereits erledigt. Jetzt können Sie einfach die Teile greifen, die Sie benötigen (beachten Sie, dass dies für beide oben genannten Methoden funktioniert):
Bonus: Suchparameter
Möglicherweise möchten Sie auch die Such-URL-Parameter aufteilen, da '? StartIndex = 1 & pageSize = 10' für sich genommen nicht allzu verwendbar ist.
Wenn Sie oben Methode 1 (URL-API) verwendet haben, verwenden Sie einfach die searchParams-Getter:
Oder um alle Parameter zu erhalten:
Wenn Sie Methode 2 (die alte Methode) verwendet haben, können Sie Folgendes verwenden:
quelle
var link = document.createElement('a'); link.setAttribute('href', 'google.com'); console.log(link.protocol)
http
vielleicht auf einer Seite? Wenn nicht angegeben, wird es vom aktuellen Standort "erben"host
undhostname
. Ersteres enthält den Port (z. B.localhost:3000
), während letzteres nur der Name des Hosts ist (zlocalhost
. B. ).Aus irgendeinem Grund sind alle Antworten übertrieben. Das ist alles was es braucht:
Weitere Details finden Sie hier: https://developer.mozilla.org/en-US/docs/Web/API/window.location#Properties
quelle
URLUtils
Schnittstelle, die in WHATWG definiert ist und dasorigin
Attribut enthält.Wie bereits erwähnt, gibt es die noch nicht vollständig unterstützte,
window.location.origin
aber anstatt sie entweder zu verwenden oder eine neue Variable zu erstellen, überprüfe ich sie lieber und wenn sie nicht festgelegt ist, um sie festzulegen.Beispielsweise;
Ich habe tatsächlich vor ein paar Monaten darüber geschrieben. Ein Fix für window.location.origin
quelle
window.location.origin
es existiert. Danke dir. ^^Wirt
kehrt zurück
localhost:2679
Hostname
kehrt zurück
localhost
quelle
localhost/
statt angezeigt wurdelocalhost:3000
.window.location.origin
wird ausreichen, um das gleiche zu bekommen.quelle
Dies bedeutet, dass Sie Folgendes tun können, wenn Sie nur den HTTP / HTTPS-Teil erhalten möchten:
Für die Domain können Sie verwenden:
Für den Port können Sie verwenden:
Beachten Sie, dass der Port eine leere Zeichenfolge ist, wenn er in der URL nicht sichtbar ist. Zum Beispiel:
Wenn Sie 80/443 anzeigen müssen, wenn Sie keinen Port verwenden
quelle
Warum nicht verwenden:
quelle
In der Tat funktioniert window.location.origin in Browsern nach Standards einwandfrei , aber raten Sie mal. IE folgt nicht den Standards.
Aus diesem Grund hat dies in IE, FireFox und Chrome für mich funktioniert:
Für mögliche zukünftige Verbesserungen, die Konflikte verursachen könnten, habe ich die Referenz "Fenster" vor dem Objekt "Standort" angegeben.
quelle
Hier ist die Lösung, die ich verwende:
BEARBEITEN:
Verwenden Sie Folgendes, um die browserübergreifende Kompatibilität zu erhöhen:
quelle
window.location.host
möglicherweise nicht der beste Cross-Browserquelle
quelle
Verwenden Sie einen regulären Ausdruck (Regex), der sehr nützlich ist, wenn Sie Inhalte validieren / extrahieren oder sogar eine einfache Analyse in Javascript durchführen möchten.
Der reguläre Ausdruck ist:
Demonstration:
Jetzt können Sie auch eine Validierung durchführen.
quelle
Einfache Antwort, die für alle Browser funktioniert:
quelle
ES6-Stil mit konfigurierbaren Parametern.
quelle
window.location.protocol + '//' + window.location.host
quelle