Make DuckDuckgGo Image search result entry's image size information as link to the direct image resource.
当前为
// ==UserScript==
// @name DuckDuckgGo Image Direct Link Patch
// @namespace https://greasyfork.org/en/users/85671-jcunews
// @version 1.0.1
// @license AGPL v3
// @author jcunews
// @description Make DuckDuckgGo Image search result entry's image size information as link to the direct image resource.
// @match https://duckduckgo.com/?*iax=images*
// @grant none
// @run-at document-start
// ==/UserScript==
((dt, xo, ht) => {
function processEntries() {
if (!dt) {
clearTimeout(ht);
ht = setTimeout(processEntries, 500);
return;
}
document.querySelectorAll(".tile--img>.tile--img__dimensions:not(.linked_didlp)").forEach((e, a, u) => {
e.classList.add("linked_didlp");
(a = document.createElement("A")).textContent = e.textContent;
a.style.cssText = "color:inherit";
a.rel = "nofollow noopener noreferrer";
u = e.previousElementSibling.href;
if (!dt.some((d, i) => {
if (d.url === u) {
a.href = d.image;
dt.splice(i, 1);
return true
}
})) a.href = 'javascript:void("Image URL is not found")';
e.replaceChild(a, e.firstChild);
});
}
xo = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function(mtd, url) {
if (/\/i\.js\?.*o=json/.test(url)) {
this.addEventListener("load", (a, l, z) => {
try {
if (!(l = JSON.parse(this.responseText).results)) throw 0;
Array.prototype.push.apply(dt, l);
} catch(z) {}
})
}
return xo.apply(this, arguments);
};
dt = [];
addEventListener("load", a => {
if (a = document.querySelector("#zci-images .tileview__images")) {
(new MutationObserver(recs => {
clearTimeout(ht);
ht = setTimeout(processEntries, 500);
})).observe(a, {childList: true});
processEntries();
}
});
})();