Подтвердить что ты не робот

Получите субдомен и загрузите его в URL с помощью greasemonkey

У меня есть URL http://somesubdomain.domain.com (субдомены могут меняться, домен всегда один и тот же). Необходимо взять субдомен и перезагрузить страницу чем-то вроде domain.com/some/path/here/somesubdomain, используя greasemonkey (или открыть новое окно с URL-адресом domain.com/some/path/here/somesubdomain, что угодно).

4b9b3361

Ответ 1

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);

Ответ 2

Ответ, предоставленный Дереком, будет работать в большинстве распространенных случаев, но не будет работать для поддоменов "xxx.xxx" или "host.co.uk". (также, используя window.location.host, также получит номер порта, который не обрабатывается: http://www.w3schools.com/jsref/prop_loc_host.asp)

Если честно, я не вижу идеального решения этой проблемы. Лично я создал метод разделения имен хостов, который я использую очень часто, потому что он охватывает большее количество имен хостов.

Этот метод разбивает имя хоста на {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());

Этот метод возвращает поддомен только в виде строки:

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)

Эти два метода будут работать для большинства общих доменов (включая co.uk). ПРИМЕЧАНИЕ: slice в конце поддоменов должен удалить лишнюю точку.

Я надеюсь, что это решит вашу проблему.

Ответ 3

Решения, предлагаемые здесь, работают некоторое время или даже в большинстве случаев, но не везде. Насколько я знаю, лучший способ найти полный субдомен любого домена (и помните, иногда субдомены имеют периоды в них тоже! У вас могут быть субдодомены и т.д.), Чтобы использовать Public Suffix List, который поддерживается Mozilla.

Часть URL-адреса, отсутствующего в списке Public Suffix List, является субдоменом плюс сам домен, соединенный точкой. После удаления общедоступного суффикса вы можете удалить домен и оставить только поддомен, удалив последний сегмент между точками.

Посмотрим на сложный пример. Скажем, вы тестируете sub.sub.example.pvt.k12.ma.us. pvt.k12.ma.us - публичный суффикс, верьте или нет! Поэтому, если вы использовали публичный список суффикса, вы сможете быстро превратить это в sub.sub.example, удалив известный суффикс. Затем вы можете перейти от sub.sub.example к просто sub.sub после снятия последней части оставшихся частей, которая была доменом. sub.sub - ваш поддомен.

Ответ 4

Это может работать в большинстве случаев, за исключением того, что упоминается @jlbang

const split=location.host.split(".");
let subdomain="";
let domain="";
if(split.length==1){//localHost
  domain=split[0];
}else if(split.length==2){//sub.localHost or example.com
  if(split[1].includes("localhost")){//sub.localHost
    domain=split[1];
    subdomain=split[0];
  }else{//example.com
    domain=split.join(".");
  }
}else{//sub2.sub.localHost or sub2.sub.example.com or sub.example.com or example.com.ec sub.example.com.ec or  ... etc
  const last=split[split.length-1];
  const lastLast=split[split.length-2];
  if(last.includes("localhost")){//sub2.sub.localHost
    domain=last;
    subdomain=split.slice(0,split.length-1).join(".");
  }else if(last.length==2 && lastLast.length<=3){//example.com.ec or sub.example.com.ec
    domain=split.slice(split.length-3,split.length).join(".");
    if(split.length>3){//sub.example.com.ec
      subdomain=split.slice(0,split.length-3).join(".");
    }
  }else{//sub2.sub.example.com
    domain=split.slice(split.length-2,split.length).join(".");
    subdomain=split.slice(0,split.length-2).join(".");
  }
}
const newUrl = 'http://example.com/some/path/here/' + subDomain