2010-09-11 5 views
14

En utilisant l'API Google Chrome tab.url value, quelle est la meilleure méthode pour obtenir juste le domaine de la valeur entière? En JavaScript, j'utiliserais window.location.protocol & window.location.hostname. Par exemple quelque chose comme ceci:Google Chrome Plugin: Comment obtenir le domaine de l'URL (tab.url)

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

Mais cela obtient le domaine d'extension et non l'onglet ne peut donc pas utiliser cette méthode. Donc, avec une fonction similaire à celle ci-dessous ... Comment est-ce que je dépouillerais juste le domaine de la valeur tab.url?

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

Répondre

17

Tout d'abord, les domaines n'incluent pas de protocole. J'ai créé une expression régulière pour votre problème. Pour obtenir le nom d'hôte (vous voulez faire ce que les adresses IP ne sont pas des domaines) d'un URI, utilisez le comme suit:

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

Si vous souhaitez l'origine (protocole + hôte (pas le nom d'hôte, il y a différence) + port en option) au lieu du domaine, utilisez the following:

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

Tout simplement génial. – miksiii

22

Depuis cette question a été répondu, une meilleure solution est apparue. prennent désormais en charge

La plupart des navigateurs modernes utilisent des URL constructor, qui donne accès à href, hostname, path et toutes les méthodes standard de fractionnement d'une URL.

Pour obtenir le domaine, vous pouvez effectuer les opérations suivantes:

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

Cela devrait être la réponse acceptée. Dites non aux folles regex! :-) – Perry