Вградена функция на JavaScript/Greasemonkey за получаване на сървърно време?

Възможно ли е да получите сървърно време с Greasemonkey?

Един сайт, който използвам, ви казва кога последно сте направили нещо, показвайки времето на сървъра... но часовникът в ъгъла на страницата показва моята часова зона... Надявах се да напиша скрипт, който да промени това, но се надявах, че има вградена функция, вместо да се налага да пиша скрипт, за да правя математика за времето...

С други думи... часовникът на страницата може да казва 17:54, но страницата, след като напоих растение, казва, че съм напоил в 00:54... достатъчна болка е да си спомня разликата между времето на сайта и моето ... но когато на сайта ми се показват 2 различни времена, това напълно ме поразява.

Може ли Greasemonkey да извлича сървърно време?


person Kat Cox    schedule 28.09.2013    source източник
comment
Какъв сървър мислиш за това? Сървърът трябва вече да поддържа API, за да позволи текущото му време да бъде запитвано.   -  person Pointy    schedule 29.09.2013
comment
@Pointy thepikaclub.co.uk Предположих, че всички сървъри имат начин да проверяват времето на сървъра, тъй като WordPress и други CMS имат опцията да показват времето на сървъра на вашия сайт... също предполагам, че има начин за достъп до него, тъй като ви казва кога сте поливали...   -  person Kat Cox    schedule 29.09.2013
comment
Тясно свързан въпрос: Достъп до HTTP заглавките на уеб страницата в JavaScript.   -  person Brock Adams    schedule 29.09.2013


Отговори (1)


Повечето сървъри връщат сървърното време в заглавките на отговора на страницата. JavaScript не може да види тези заглавки за текущата заявка и Greasemonkey (все още) не предоставя начин да ги видите.

Greasemonkey обаче може да извлече времето на сървъра със специален HEAD AJAX. Ето пълен потребителски скрипт, който прави това:

// ==UserScript==
// @name     _Get web server time
// @include  http://YOUR_SERVER.COM/YOUR_PATH/*
// @grant    GM_xmlhttpRequest
// ==/UserScript==

GM_xmlhttpRequest ( {
    url:    location.href,
    method: "HEAD",
    onload: function (rsp) {
        var serverTime  = "Server date not reported!";
        var RespDate    = rsp.responseHeaders.match (/\bDate:\s+(.+?)(?:\n|\r)/i);

        if (RespDate  &&  RespDate.length > 1) {
            serverTime  = RespDate[1];
        }
        console.log ("Server Time: ", serverTime);
    }
} );

Внимавай:

  1. Времето на сървъра може да е различно от времето на уеб страницата, ако сървърът се опита да „локализира“ страницата към вашата часова зона. Повечето качествени сървъри отчитат времето си в GMT.
  2. Извлеченото време обикновено ще бъде в рамките на милисекунди от времето, когато целевата страница е видяна. Но, в зависимост от вашия скрипт, страницата, мрежовия трафик и т.н., изтегленото време може също да бъде няколко секунди след времето, в което е стартирана целевата страница. Не можете да получите точно съвпадение.
person Brock Adams    schedule 28.09.2013
comment
За съжаление това не работи... вероятно защото използвам по-стара версия на GM... Подозирам, че този ред GM_xmlhttpRequest е проблемът... Опитах предупреждение, тъй като console.log никога не е работил за мен, но се показва празно, където ще бъде времето... Моят GM е достатъчно стар, за да не се налага да използвам @grant. Или това, или извлечената информация не съответства на вашия регулярен израз... как мога да видя какво се връща? - person Kat Cox; 30.09.2013
comment
Няма значение, че.... връща се Дата: понеделник, 30 септември 2013 г. 18:48:23 GMT , понеделник, 30 септември 2013 г. 18:48:23 GMT - person Kat Cox; 30.09.2013
comment
Трябва да изясня, че... RespDate връща горното... serverTime всъщност връща Mon, 30 Sep 2013 20:56:12 GMT... но промяната на вашия console.log на предупреждение връща празно време... Промених вашето запетая до + и се показва точно... сега да си поиграя с това, за да извлека само времето... тогава може би ще мога да разбера как да използвам това, за да създам часовник за обратно броене за друга страница... Благодаря! - person Kat Cox; 01.10.2013