Это небольшое решение, которое работает во всех браузерах даже IE8:
var monitor = setInterval(function(){
var elem = document.activeElement;
if(elem && elem.tagName == 'IFRAME'){
clearInterval(monitor);
alert('clicked!');
}
}, 100);
Вы можете проверить его здесь: http://jsfiddle.net/oqjgzsm0/
Тип time_t
представляет Unix time , количество секунд с четверга, 1 января 1970 года, 00:00:00 UTC, минус високосные секунды.
(Интерфейс POSIX clock_gettime()
может расширить поддержку для CLOCK_TAI
, что будет то же самое, за исключением , включая високосных секунд.)
Для манипуляции датами , лучше использовать стандартное время разбивки C, struct tm
, как предусмотрено в localtime()
или gmtime()
.
localtime()
использует текущий часовой пояс. (В системах Linux часовой пояс по умолчанию установлен в /etc/timezone
, но каждый пользователь может переопределить его, установив переменную окружения TZ
. Подробнее о том, как это сделать, см. Функцию tzset()
POSIX.1]. ) gmtime()
использует UTC.
«Уловка» заключается в том, что если вы вызовете mktime()
для struct tm
, описывающего дату и время в текущем часовом поясе, он сначала нормализует поля, а затем возвращает время Unix как time_t
, соответствующее этой дате и местному времени. Например, если день месяца равен 45, он будет корректировать день, месяц и год (и соответствующие поля) для отражения фактической даты.
Итак, если вы хотите узнать дату и время через пять дней и шесть часов:
time_t now, then;
struct tm *t;
now = time(NULL);
t = localtime(&now);
printf("Now is %llu = %04d-%02d-%02d %02d:%02d%02d\n",
(unsigned long long)now,
t->tm_year + 1900, t->tm_mon + 1, t->tm_mday,
t->tm_hour, t->tm_min, t->tm_sec);
t->tm_hour += 6;
t->tm_mday += 5;
t->tm_isdst = -1; /* Don't know if DST or not; please guess. */
then = mktime(t);
printf("Then is %llu = %04d-%02d-%02d %02d:%02d:%02d\n",
(unsigned long long)then,
t->tm_year + 1900, t->tm_mon + 1, t->tm_mday,
t->tm_hour, t->tm_min, t->tm_sec);
Если мы опускаем печать значений now
и then
, вышеприведенное совершенно стандартный код C и будет работать на всех современных операционных системах.
Если вы используете Linux или другую систему POSIXy (Mac, BSD), было бы лучше использовать
time_t now, then;
struct tm tbuffer, *t;
now = time(NULL);
t = localtime_r(&now, &tbuffer);
printf("Now is %llu = %04d-%02d-%02d %02d:%02d%02d\n",
(unsigned long long)now,
t->tm_year + 1900, t->tm_mon + 1, t->tm_mday,
t->tm_hour, t->tm_min, t->tm_sec);
t->tm_hour += 6;
t->tm_mday += 5;
t->tm_isdst = -1; /* Don't know if DST or not; please guess. */
then = mktime(t);
printf("Then is %llu = %04d-%02d-%02d %02d:%02d:%02d\n",
(unsigned long long)then,
t->tm_year + 1900, t->tm_mon + 1, t->tm_mday,
t->tm_hour, t->tm_min, t->tm_sec);
Разница в том, что localtime()
возвращает указатель на статически распределенный буфер, а другой обращение к нему (даже в другом потоке) перезапишет содержимое. POSIX.1 localtime_r()
принимает второй параметр, указатель на struct tm
, где вместо этого сохраняется результат.