2010-09-11 15 views
14

Usando la API de Google Chrome tab.url value, ¿cuál es el mejor método para obtener solo el dominio de todo el valor?Plugin de Google Chrome: cómo obtener el dominio de la URL (tab.url)

En JavaScript usaría window.location.protocol & window.location.hostname. Por ejemplo, algo como esto:

var domain = window.location.protocol + "//" + window.location.hostname; 

Pero eso tiene el dominio de extensión y no la pestaña, por lo que no puede usar ese método. Entonces, con una función similar a la siguiente ... ¿Cómo puedo despojar solo el dominio del valor tab.url?

function show_alert() { 
    chrome.tabs.getSelected(null, function(tab) { 
     var currentURL = tab.url; 
     alert(currentURL); 
    }); 
} 

Respuesta

17

En primer lugar, los dominios no incluyen un protocolo. He creado una expresión regular para tu problema. Para obtener el nombre de host (que querría hacer esto como direcciones IP no son dominios) de un URI, utilice la siguiente:

var domain = uri.match(/^[\w-]+:\/{2,}\[?([\w\.:-]+)\]?(?::[0-9]*)?/)[1]; 
// Given uri = "http://www.google.com/", domain == "www.google.com" 

Si desea que el origen (protocolo + anfitrión (no nombre de host, hay una diferencia) + puerto opcional) en lugar del dominio, utilizan the following:

var origin = uri.match(/^[\w-]+:\/{2,}\[?[\w\.:-]+\]?(?::[0-9]*)?/)[0]; 
// Given uri = "http://www.google.com/", origin == "http://www.google.com" 
+2

Simplemente genial. – miksiii

22

Dado que esta pregunta fue respondida en un principio, una mejor solución ha aparecido.

La mayoría de los navegadores modernos soportan ahora el uso de la URL constructor, que proporciona acceso a href, hostname, path y todas las formas estándar de división de una URL.

Para conseguir el dominio, se puede hacer lo siguiente:

chrome.tabs.getSelected(null, function (tab) { 
    var url = new URL(tab.url) 
    var domain = url.hostname 
    // `domain` now has a value like 'example.com' 
}) 
+5

Esta debería ser la respuesta aceptada. ¡Solo di no a los regexuales locos! :-) – Perry

Cuestiones relacionadas