Direct image links for sites that obfuscate the image from easy downloading.
当前为
// ==UserScript==
// @name Direct Picture Link (Instagram)
// @namespace https://lawrenzo.com/p/direct-picture-link
// @version 0.1
// @description Direct image links for sites that obfuscate the image from easy downloading.
// @author Lawrence Sim
// @license WTFPL (http://www.wtfpl.net)
// @match https://*.instagram.com/*
// @grant none
// ==/UserScript==
(function() {
var contextMenu;
var openContextMenu = function(evt, src) {
if(!contextMenu) {
contextMenu = document.createElement("div");
contextMenu.style["position"] = "absolute";
contextMenu.style["background"] = "#efefef";
contextMenu.style["border-radius"] = "0.2em";
contextMenu.style["box-shadow"] = "1px 1px 3px 1px rgba(0,0,0,0.4)";
contextMenu.style["padding"] = "0.2em 0.5em";
contextMenu.style["font-size"] = "0.85em";
let a = document.createElement("a");
a.innerHTML = "> view direct image";
a.setAttribute("target", "_blank");
a.setAttribute("href", src);
contextMenu.append(a);
document.body.append(contextMenu);
} else {
contextMenu.querySelector("a").setAttribute("src", src);
}
contextMenu.style.left = `${evt.pageX}px`;
contextMenu.style.top = `${evt.pageY}px`;
};
document.body.addEventListener("click", () => {
if(!contextMenu) return;
contextMenu.remove();
contextMenu = null;
});
var link = function() {
let images = document.querySelectorAll("article img");
images.forEach((img) => {
if(img.getAttribute("ilnkd")) return;
let btn = img.closest("div[role='button']");
if(!btn) return;
btn.addEventListener("contextmenu", (evt) => {
evt.preventDefault();
openContextMenu(evt, img.getAttribute("src"));
});
img.setAttribute("ilnkd", 1);
});
};
link();
var obs = new MutationObserver(link);
obs.observe(document.body, {childList:true, subtree:true});
})();