2009-08-15 11 views
17

私はURL http://somesubdomain.domain.com(サブドメインは、ドメインは常に同じです)を持っています。サブドメインを取得し、greasemonkeyを使用してdomain.com/some/path/here/somesubdomainのようなものでページをリロードする必要があります(または、URL domain.com/some/path/here/somesubdomainの新しいウィンドウを開きます)。サブドメインを取得し、greasemonkeyを使用してURLにロードしてください

答えて

28
var full = window.location.host 
//window.location.host is subdomain.domain.com 
var parts = full.split('.') 
var sub = parts[0] 
var domain = parts[1] 
var type = parts[2] 
//sub is 'subdomain', 'domain', type is 'com' 
var newUrl = 'http://' + domain + '.' + type + '/your/other/path/' + subDomain 
window.open(newUrl); 
+0

ありがとうございました! –

+20

ドメインがgoogle.co.ukの場合はどうなりますか?これにより間違ったサブドメインが返されます。 – TLK

+2

サブドメインのみを取得するには:window.location.host.split( '。')[0]; –

12

デレクが提供する回答は、最も一般的な例では動作しますが、「xxx.xxx」サブドメイン、または「host.co.uk」のために動作しません。 (また、window.location.hostを使用すると、処理されないポート番号も取得されます:http://www.w3schools.com/jsref/prop_loc_host.asp

正直言って私はこの問題の完璧な解決策はありません。 個人的には、私がホスト名の分割を行う方法を作成しました。これは、より多くのホスト名をカバーするために頻繁に使用します。

function getSubdomain(hostname) { 
     var regexParse = new RegExp('[a-z\-0-9]{2,63}\.[a-z\.]{2,5}$'); 
     var urlParts = regexParse.exec(hostname); 
     return hostname.replace(urlParts[0],'').slice(0, -1); 
} 

console.log(getSubdomain(window.location.hostname)); 
// for use in node with express: getSubdomain(req.hostname) 

これら2つの方法は(co.ukを含む)は、最も一般的なドメインで動作します。

この方法は、この方法は、唯一の文字列としてサブドメインを返し{domain: "", type: "", subdomain: ""}

function splitHostname() { 
     var result = {}; 
     var regexParse = new RegExp('([a-z\-0-9]{2,63})\.([a-z\.]{2,5})$'); 
     var urlParts = regexParse.exec(window.location.hostname); 
     result.domain = urlParts[1]; 
     result.type = urlParts[2]; 
     result.subdomain = window.location.hostname.replace(result.domain + '.' + result.type, '').slice(0, -1);; 
     return result; 
} 

console.log(splitHostname()); 

にホスト名を分割します :サブドメインの末尾にあるsliceは余分なドットを削除することです。

これがあなたの問題を解決することを願っています。

+1

私が見つけたベスト&最も正確な答え、 – webdevinci

+0

私はDereksのソリューションを使って、サブドメインを持っています。 Vladsの答えは私の場合にはうまくいく。 – MartinJH

1

ここで提供されているソリューションは、時間の一部、またはほとんどの時間で動作しますが、どこでも動作しません。私の知る限りでは、の完全サブドメインを見つける最良の方法はドメインです(また、サブドメインにもピリオドがあることを覚えておいてください!サブサブドメインなどを持つことができます)は、Public Suffix List Mozillaによる。

パブリックサフィックスリストにないURLの部分は、サブドメインとドメイン自体にドットで結合されています。パブリックサフィックスを削除すると、ドメインを削除して、ドットの間の最後のセグメントを削除してサブドメインだけを残すことができます。

複雑な例を見てみましょう。 sub.sub.example.pvt.k12.ma.usをテストしているとします。 pvt.k12.ma.usは公開サフィックスですが、それは信じられないかもしれません!したがって、あなたがPublic Suffix Listを使用した場合、知られている接尾辞を削除することで、すぐにそれをsub.sub.exampleに変えることができます。次に、sub.sub.exampleから、sub.subまで、ドメインである残りの部分の最後の部分を取り除いた後に行くことができます。サブドメインはsub.subです。

関連する問題