我有一个获取当前服务器时间的脚本,效果很好。问题是,我想在页面上的时钟之前插入服务器时间(显示本地时间,即使站点上的活动告诉您可以在特定服务器时间再次执行此操作)。出于某种原因,我无法弄清楚如何在我想要的地方贴上这些东西。
您可以在不登录的情况下访问的目标页面是Here
我之前想要插入节点的div的id似乎是clock-wrapper
代码我尝试过:(在alert和console.log之间,在“原始脚本”中插入),
var textNode = document.createElement('b');
var clock=document.getElementById('clock-wrapper');
textNode.appendChild ('<b>' + serverTime + '</b>');
clock.parentNode.insertBefore(textNode, clock);
和
var textNode = document.createElement('b');
var getRef = document.getElementById("clock-wrapper");
var parentDiv = getRef.parentNode;
parentDiv.insertBefore(textNode, getRef);
以下是原始脚本:
// ==UserScript==
// @name test server time
// @namespace http://trueidiocy.us
// @include https://www.google.com
// @include http://stackoverflow.com
// @include http://www.thepikaclub.co.uk*
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js
// @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];
}
alert ("Server Time: " + serverTime);
console.log ("Server Time: ", serverTime);
}
} );
我在这里错过了什么?我是否只需要找到比我未来脚本使用的更好的参考源?此外,让脚本再次运行以每分钟更新一次会有多困难?
答案 0 :(得分:1)
问题中的第一个代码段无效(错误的appendChild
调用),但第二个代码段可行 - 除了<b>
标记添加了空内容。
无论如何,由于您的基本脚本(明智地)加载jQuery,使用它。 jQuery的.before()
在这里很有用。代码是:
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];
}
$("#clock-wrapper").before ('<b>' + serverTime + '</b>');
}
} );
如果您想每分钟左右重新获取服务器时间,请使用javascript的setInterval()
。除非您需要避免创建多个<b>
标记,因此代码需要额外检查。它变成了:
getServerTime (); //-- Initial call
//-- Recheck every minute
var clkRefreshTimer = setInterval (getServerTime, 60 * 1000); // 60 seconds
function getServerTime () {
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];
}
//-- Does our display node already exist?
var ourTimeDisp = $("#gmTimeDisplay");
if (ourTimeDisp.length) {
ourTimeDisp.text (serverTime);
}
else {
$("#clock-wrapper").before (
'<b id="gmTimeDisplay">' + serverTime + '</b>'
);
}
}
} );
}
然而,您可能很聪明地查找如何向页面添加JS时钟,只需调用GM_xmlhttpRequest
一次来初始化您的新时钟。那么你的时钟JS会根据你的喜好随时更新它而不会加剧服务器。