/**
* @archivo url.js
* URL del @módulo
* /
importar documento desde 'global/document';
importar ventana desde 'global/window';
/ **
* @typedef {Objeto} url:URLObjeto
*
* Protocolo @property {cadena}
* El protocolo de la url que se analizó.
*
* @property {cadena} nombre de host
* El nombre de host de la URL que se analizó.
*
* @propiedad {cadena} puerto
* El puerto de la URL que se analizó.
*
* @property {cadena} nombre de ruta
* El nombre de ruta de la URL que se analizó.
*
* @propiedad {cadena} búsqueda
* La consulta de búsqueda de la URL que se analizó.
*
* @property {cadena} hash
* El hash de la URL que se analizó.
*
* @propiedad {cadena} host
* El host de la URL que se analizó.
* /
/ **
* Resolver y analizar los elementos de una URL.
*
* @función
* @param {Cadena} URL
* La url a analizar
*
* @return {url:URLOobjeto}
* Un objeto de detalles de URL
* /
exportar const parseUrl = function(url) {
// Este método completo se puede reemplazar con URL una vez que podamos eliminar IE11
const props = ['protocolo', 'hostname', 'port', 'pathname', 'search', 'hash', 'host'];
// agrega la URL a un ancla y deja que el navegador analice la URL
const a = documento.createElement('a');
a.href = url;
// Copia las propiedades de URL específicas a un nuevo objeto
// Esto también es necesario para IE porque el ancla pierde su
// propiedades cuando se elimina del dom
const detalles = {};
para (sea i = 0; i < accesorios.longitud; i++) {
detalles[accesorios[i]] = a[accesorios[i]];
}
// IE agrega el puerto a la propiedad del host a diferencia de todos los demás. Si
// se agrega un identificador de puerto para puertos estándar, elimínelo.
if (detalles.protocolo === 'http:') {
detalles.host = detalles.host.replace(/:80$/, '');
}
if (detalles.protocolo === 'https:') {
detalles.host = detalles.host.replace(/:443$/, '');
}
if (!detalles.protocolo) {
detalles.protocolo = ventana.ubicación.protocolo;
}
/* estambul ignorar si */
if (!detalles.host) {
detalles.host = ventana.ubicación.host;
}
detalles de devolución;
};
/ **
* Obtenga la versión absoluta de la URL relativa. Se utiliza para indicarle a Flash la URL correcta.
*
* @función
* @param {cadena} URL
* URL para hacer absoluta
*
* @return {cadena}
* URL absoluta
*
* @ver http://stackoverflow.com/questions/470832/getting-an-absolute-url-from-a-relative-one-ie6-issue
* /
exportar const getAbsoluteURL = function(url) {
// Comprobar si es una URL absoluta
si (!url.match(/^https?:\/\//)) {
// Convertir a URL absoluta. Flash alojado fuera del sitio necesita una URL absoluta.
// agrega la URL a un ancla y deja que el navegador analice la URL
const a = documento.createElement('a');
a.href = url;
URL = a.href;
}
URL de retorno;
};
/ **
* Devuelve la extensión del nombre del archivo pasado. Devolverá una cadena vacía.
* si pasa una ruta no válida.
*
* @función
* @param {cadena} ruta
* La ruta del nombre del archivo como '/ruta/al/archivo.mp4'
*
* @return {cadena}
* La extensión en minúsculas o una cadena vacía si no
* se pudo encontrar la extensión.
* /
export const getFileExtension = función (ruta) {
if (tipo de ruta === 'cadena') {
const splitPathRe = /^(\/?)([\s\S]*?)((?:\.{1,2}|[^\/]+?)(\.([^\.\/ \?]+)))(?:[\/]*|[\?].*)$/;
const pathParts = splitPathRe.exec(ruta);
if (partesruta) {
devuelve pathParts.pop().toLowerCase();
}
}
devolver '';
};
/ **
* Devuelve si la URL pasada es una solicitud de dominio cruzado o no.
*
* @función
* @param {cadena} URL
* La url a comprobar.
*
* @param {Objeto} [winLoc]
* el dominio contra el cual verificar la URL, por defecto es ventana.ubicación
*
* @param {cadena} [winLoc.protocolo]
* El protocolo de ubicación de ventana por defecto es window.location.protocol
*
* @param {cadena} [winLoc.host]
* El host de ubicación de la ventana por defecto es window.location.host
*
* @return {booleano}
* Si se trata de una solicitud de dominio cruzado o no.
* /
export const isCrossOrigin = function(url, winLoc = window.ubicación) {
const urlInfo = parseUrl(url);
// Las direcciones URL relativas del protocolo IE8 devolverán ':' para el protocolo
const srcProtocol = urlInfo.protocol === ':' ? winLoc.protocolo: urlInfo.protocolo;
// Comprobar si la url es de otro dominio/origen
// IE8 no conoce location.origin, por lo que no confiaremos en él aquí
const crossOrigin = (srcProtocol + urlInfo.host) !== (winLoc.protocol + winLoc.host);
volver origen cruzado;
};