Flash / Определение домена и создание сайтлока


Сегодня хочу поговорить об определении домена, из которого запущена игра. Это может пригодится в ряде случаев:
 - делаем сайтлок
- блокировка рекламы на определенных доменах
- при сборе статистики
и т.д. Думаю этот список еще можно продолжить, но в голову больше ничего ни приходит.

В интернете, есть полно исходников функции, которая определяет домен. Но какие я только не находил, у них у всех есть какие-то недостатки.Поэтому пришлось написать свой код.


private function GetDomain(): String
{
 var local: LocalConnection = new LocalConnection()
 
 if (local.domain == "localhost")
  return "localhost";
 
 var url: String = stage.loaderInfo.loaderURL;
 var urlStart: int = url.indexOf("://") + 3;
 var wwwPart: String = url.substr(urlStart, 4);
 
 if (wwwPart == "www.")
  urlStart += 4;
  
 var urlEnd: Number = url.indexOf("/", urlStart);
 var domain: String = url.substring(urlStart, urlEnd);

 return domain;
}

Она базируется на коде функции, которую я нашел, но доработал. Она проверяет запущена ли флешка локально, если нет, то из лоадера достается текущий домен и обрезается вся лишняя информация. www. часть тоже обрезается, т.к. она не нужна.
Теперь мы можем например, блокировать рекламу или отправить на сервер информацию с какого домена мы запущены. Но для сайтлока, нужно написать еще функцию, которая будет сравнивать текущий домен с разрешенным, причем субдомены тоже должны быть разрешенными.
private function CheckDomain(currentDomain: String, urls: Array): Boolean
{
 for (var i: int = 0; i < urls.length; i++)
 {
  var index: int = currentDomain.indexOf(urls[i]);
  
  if (index != -1)
  {
   if (index == 0)
   {
    // main domain (domain.com)
    return true;
   }
   else if (currentDomain.charAt(index - 1) == ".")
   {
    // subdomain (sub.domain.com)
    return true;
   }
   else
   {
    // fake domain (fakedomain.com)
   }
  }
 }

 return false;
}

В функцию передается текущий домен и список адресов(без www части) для которых функция должна возвращать true.
В комментариях приводятся примеры доменных имен, которые подходят под условие.

Есть еще 1 вариант проверить домен, через регулярные выражения, но до этого еще руки не дошли :)


Поделитесь интересным с друзьями:

Блог: http://romanlovetext.blogspot.com/