Встроенная функция 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. Время на сервере может отличаться от времени на веб-странице, если сервер пытается «привязать» страницу к вашему часовому поясу. Большинство качественных серверов сообщают свое время по Гринвичу.
  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 по Гринвичу, пн, 30 сентября 2013 г. 18:48:23 по Гринвичу - person Kat Cox; 30.09.2013
comment
Я должен уточнить, что ... RespDate возвращает вышеуказанное ... serverTime фактически возвращает понедельник, 30 сентября 2013 г., 20:56:12 по Гринвичу ... но изменение вашего console.log на предупреждение возвращает пустое время ... Я изменил ваш запятая на +, и он отображается правильно... теперь поэкспериментируйте с этим, чтобы извлечь только время... тогда, может быть, я смогу понять, как использовать это, чтобы создать часы обратного отсчета для другой страницы... Спасибо! - person Kat Cox; 01.10.2013