Wayback Machine Image Fixer

Attempts to fix broken images by replacing them with working timestamps based on JSON results

目前为 2015-10-18 提交的版本。查看 最新版本

// ==UserScript==
// @name          Wayback Machine Image Fixer
// @namespace     DoomTay
// @description   Attempts to fix broken images by replacing them with working timestamps based on JSON results
// @include       http://web.archive.org/web/*
// @exclude       http://web.archive.org/web/*.jpg
// @exclude       http://web.archive.org/web/*.jpeg
// @exclude       http://web.archive.org/web/*.png
// @exclude       http://web.archive.org/web/*.gif
// @exclude       http://web.archive.org/web/*.bmp
// @version       1.1.1
// @grant         GM_xmlhttpRequest 

// ==/UserScript==

var pics = document.images;

var timestamp = window.location.href.substring(window.location.href.indexOf("/web/") + 5,window.location.href.indexOf("/",window.location.href.indexOf("/web/") + 5));

function replaceImage(target)
{
	var originalURL = target.src.substring(target.src.lastIndexOf('http'));
	var newURL = GM_xmlhttpRequest({
		url: "http://archive.org/wayback/available?url=" + originalURL + "&closest=" + timestamp,
		method: "GET",
		headers: {"Accept": "application/json"},
		onload: function(response) {
			if (response.readyState == 4) {
				if(response.status == 503)
				{
					//We caught a 503, which means that the API wasn't "ready" for us yet. Let's try again
					replaceImage(target)
				}
				else if(JSON.parse(response.responseText)["archived_snapshots"]["closest"] == null)
				{
					//Try and "expose" image links that are unclickable due to the image not loading
					if(target.alt == "" && target.width == 0 && target.parentNode.nodeName == "A")
					{
						//Changing the source is pretty hacky, but it's the only way I can think of to turn "invisible" image links into something clickable
						target.src = target.src.substring(target.src.lastIndexOf("http"));
						target.width = 25;
						target.height = 25;
					}
					return;
				}
				else target.src = JSON.parse(response.responseText)["archived_snapshots"]["closest"]["url"];
			}
		}
	});
}

function evaluateImage(pic)
{
	GM_xmlhttpRequest({
		url: pic.src,
		method: "HEAD",
		onload: function(response) {
			//Going off of response code is unreliable. Sometimes an image will return a status code of 200 even though it would redirect to an error page should you view the image directly, so we're looking at content type instead
			if(response.responseHeaders.indexOf("Content-Type: text/html") > -1)
			{
				replaceImage(pic);
			}
		}
	});
}

for(var i = 0; i < pics.length; i++)
{
	//Skip over stuff related to the Wayback Machine toolbar
	if(isInToolbar(pics[i])) continue;
	//Ignore data URIs;
	if(pics[i].src.indexOf("data:") > -1) continue;
	evaluateImage(pics[i]);
}

function isInToolbar(node,parent)
{
	var baseNode = node;
	var found = false;
	while(baseNode != document)
	{
		baseNode = baseNode.parentNode;
		if(baseNode == document.getElementById("wm-ipp"))
		{
			return true;
		}
	}
	return false;
}

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址