javascript Kako provjeriti je li URL iste podrijetlo kao trenutna stranica?
Kako mogu provjeriti je li određeni URL niz iz iste domene/hosta kao trenutna stranica? Na primjer, ako želim vezati na linkove, ali spriječiti zadano samo na linkovima prema istom hostu...
Odgovor #1
Ovo bi danas trebalo biti sigurno za korištenje:
function sameOrigin(a, b) {
const urlA = new URL(a);
const urlB = new URL(b);
return urlA.origin === urlB.origin;
}
console.log(sameOrigin('https://stacksnippets.net', window.location))Odgovor #2
Definicija podrijetla iz RFC 6454:
Otprilike govoreći, dva URI-ja pripadaju istom podrijetlu (tj. predstavljaju istu glavnu jedinicu) ako imaju isti shemu, domaćina i port.
Dakle, trebamo usporediti shemu, domaćina i port iz dva URI-ja, ako su isti, tada su ta dva URI-ja istog podrijetla.
Radni primjer koda:
function isOriginSameAsLocation(url) {
var pageLocation = window.location;
var URL_HOST_PATTERN = /(\w+:)?(?:\/\/)([\w.-]+)?(?::(\d+))?\/?/;
var urlMatch = URL_HOST_PATTERN.exec(url) || [];
var urlparts = {
protocol: urlMatch[1] || '',
host: urlMatch[2] || '',
port: urlMatch[3] || ''
};
function defaultPort(protocol) {
return {'http:':80, 'https:':443}[protocol];
}
function portOf(location) {
return location.port || defaultPort(location.protocol||pageLocation.protocol);
}
return !!( (urlparts.protocol && (urlparts.protocol == pageLocation.protocol)) &&
(urlparts.host && (urlparts.host == pageLocation.host)) &&
(urlparts.host && (portOf(urlparts) == portOf(pageLocation)))
);
}
