您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Shows when the document was last modified
当前为
// ==UserScript== // @name Document Modification Display // @namespace http://tampermonkey.net/ // @version 0.5.2 // @description Shows when the document was last modified // @author You // @match *://*/* // @grant none // ==/UserScript== (function() { 'use strict'; buildAndAddModificationDisplay(); })(); function buildAndAddModificationDisplay() { document.getElementsByTagName("BODY")[0].appendChild(createModificationContainer()); } function createModificationContainer() { var modification_display = document.createElement("div"); modification_display.setAttribute("id", "modification-container"); addMinMaxButton(modification_display); var modification_content = document.createElement("div"); modification_content.setAttribute("id", "modification_content"); modification_display.appendChild(modification_content); addLastModified(modification_content); addSitemapXml(modification_content); return modification_display; } var modification_display_open = true; function addMinMaxButton(container) { var minMaxButton = document.createElement("div"); minMaxButton.setAttribute("id", "min-max-button"); minMaxButton.appendChild(document.createTextNode("-")); minMaxButton.setAttribute("style", "position: absolute;right: 0;top: 0;line-height: 9px;border-left: solid 2px;border-bottom: solid 2px;height: 14px;width: 15px;text-align: center;"); minMaxButton.addEventListener("click", function(e) { var modContainer = document.getElementById("modification-container"); if (modification_display_open) { minimizeModContainer(modContainer, minMaxButton); } else { maximizeModContainer(modContainer, minMaxButton); } }); container.appendChild(minMaxButton); maximizeModContainer(container, minMaxButton); } var cached_modification_content; function minimizeModContainer(elem, button) { button.innerHTML = ''; button.appendChild(document.createTextNode("+")); cached_modification_content = document.getElementById("modification_content").innerHTML; var minimized_css = "position: fixed;height: 20px;bottom: -3px;left: -3px;padding-right: 20px;border: solid grey;border-radius: 3px;background-color: lightgray;z-index:1001;color:grey!important;"; elem.setAttribute("style", minimized_css); document.getElementById("modification_content").innerHTML = ''; modification_display_open = false; } function maximizeModContainer(elem, button) { button.innerHTML = ''; button.appendChild(document.createTextNode("-")); var maximized_css = "position: fixed;bottom: -3px;left: -3px;padding: 5px;padding-right: 20px;border: solid grey;border-radius: 3px;background-color: lightgray;z-index:1001;color:grey!important;"; elem.setAttribute("style", maximized_css); if (cached_modification_content) { document.getElementById("modification_content").innerHTML = cached_modification_content; } modification_display_open = true; } function addLastModified(container) { var last_modified_container = document.createElement("div"); last_modified_container.setAttribute("id", "last_modified_container"); var last_modfied_text = getLastModifiedText(); var last_modified_content = document.createTextNode(last_modfied_text); last_modified_container.appendChild(last_modified_content); if (last_modfied_text.indexOf("Now") !== -1) { addHintToLastModified(last_modified_container); } container.appendChild(last_modified_container); } function getLastModifiedText() { var now = Date.now(); var lastModifiedDate = Date.parse(document.lastModified); var secondsSinceModified = (now - lastModifiedDate) / 1000; var lastModifiedData = secondsSinceModified > 3 ? document.lastModified : "Now"; return 'Last Modified: ' + lastModifiedData; } function addHintToLastModified(container) { var hintHoverable = document.createElement("sup"); hintHoverable.setAttribute("style", "margin-left: 3px;cursor: help;"); hintHoverable.appendChild(document.createTextNode("?")); hintHoverable.appendChild(getTooltip()); addHintHoverEvents(hintHoverable); container.appendChild(hintHoverable); } function addHintHoverEvents(hintElem) { var css_show = "display: block;background: #C8C8C8;margin-left: 28px;padding: 5px;position: fixed;z-index: 1000;width: 183px;left: 95px;bottom: 43px;border: darkgrey dotted;font-size:12px;text-align:center;"; hintElem.addEventListener("mouseenter", function(event) { var tooltip = document.getElementById("now-hint-tooltip"); tooltip.setAttribute("style", css_show); }); hintElem.addEventListener("mouseleave", function(event) { var tooltip = document.getElementById("now-hint-tooltip"); tooltip.setAttribute("style", "display: none"); }); } function getTooltip() { var tooltip = document.createElement("div"); tooltip.setAttribute("id", "now-hint-tooltip"); tooltip.setAttribute("style", "display: none"); tooltip.appendChild(document.createTextNode("This is likely a dynamic page.")); return tooltip; } var sitemap_loaded = false; function addSitemapXml(container) { var getUrl = window.location; var sitemapUrl = getUrl.protocol + "//" + getUrl.host + "/sitemap.xml"; var sitemap_container = document.createElement("div"); sitemap_container.setAttribute("id", "sitemap_xml_link"); animateSitemapLoad(sitemap_container, 1, 0); container.append(sitemap_container); checkIfSitemapExists( sitemapUrl, function() { addSitemapXmlSuccess(sitemap_container, sitemapUrl); }, function() { addSitemapXmlFailure(sitemap_container); }); } function addSitemapXmlSuccess(container, url) { var sitemap_link = document.createElement("a"); sitemap_link.setAttribute("href", url); sitemap_link.setAttribute("target", "_blank"); sitemap_link.setAttribute("style", "color: green!important;text-decoration: underline;"); var sitemap_text = document.createTextNode("Sitemap"); sitemap_link.appendChild(sitemap_text); container.innerHTML = ''; container.appendChild(sitemap_link); } function addSitemapXmlFailure(container) { var sitemap_link = document.createElement("a"); sitemap_link.setAttribute("style", "color: red!important;text-decoration: underline;text-decoration-style: dotted;"); var sitemap_text = document.createTextNode("Sitemap not found"); sitemap_link.appendChild(sitemap_text); container.innerHTML = ''; container.appendChild(sitemap_link); } function animateSitemapLoad(sitemap_container, direction, iteration) { sitemap_container.innerHTML = ""; sitemap_container.appendChild( document.createTextNode( getLoadingMessageForFrame(iteration))); sitemap_container.setAttribute("style", "color: darkgrey!important;"); iteration += direction; if (iteration === 3) { direction = -1; } else if (iteration === 0) { direction = 1; } setTimeout(function () { if (!sitemap_loaded) { animateSitemapLoad(sitemap_container, direction, iteration); } }, 250); } function getLoadingMessageForFrame(numDots) { var msg = "Loading"; for (var i = 0; i < numDots; i++) { msg += "."; } return msg; } function checkIfSitemapExists(url, success, failure) { var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (this.readyState == 4 && (this.status == 200 || this.status == 302)) { sitemap_loaded = true; success(); } else if (this.readyState == 4) { sitemap_loaded = true; failure(); } }; xhttp.open("GET", url, true); xhttp.send(); }