2010-09-11 8 views
14

Utilizzando l'API di Google Chrome tab.url value, qual è il metodo migliore per ottenere solo il dominio dall'intero valore?Google Chrome Plugin: come ottenere il dominio dall'URL (tab.url)

In JavaScript vorrei usare window.location.protocol & window.location.hostname. Ad esempio qualcosa di simile:

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

Ma questo ottiene il dominio di estensione e non la scheda, quindi non è possibile utilizzare tale metodo. Quindi con una funzione simile a quella qui sotto ... Come faccio a togliere solo il dominio dal valore tab.url?

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

risposta

17

Prima di tutto, i domini non includono un protocollo. Ho creato un'espressione regolare per il tuo problema. Per ottenere il nome dell'host (che ci si vuole fare questo in quanto gli indirizzi IP non sono i domini) di un URI, utilizzare il seguente:

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

Se si desidera che l'origine (protocollo + host (non hostname, c'è un differenza) + porta opzionale) al posto del dominio, utilizzare the following:

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

semplicemente eccezionale. – miksiii

22

Poiché tale questione è stato originariamente risposto, una soluzione migliore è apparso.

maggior parte dei browser moderni supportano ora l'uso del URL constructor, che fornisce accesso a href, hostname, path e tutti i modi standard di frazionamento di un URL.

Per ottenere il dominio, si potrebbe procedere come segue:

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

Questa dovrebbe essere la risposta accettata. Dì solo di no alle regex pazze! :-) – Perry

Problemi correlati