您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Replace all images on a page with dogs
- // ==UserScript==
- // @name DOGGO
- // @namespace https://davidjb.online/
- // @version 0.1.1
- // @description Replace all images on a page with dogs
- // @author David Bailey
- // @match *://*/*
- // @grant GM.getValue
- // @grant GM.setValue
- // @grant GM.deleteValue
- // ==/UserScript==
- async function getDataUrl(url) {
- const blob = await fetch(url).then(r => r.blob());
- return await new Promise(resolve => {
- const reader = new FileReader();
- reader.onload = () => resolve(reader.result);
- reader.readAsDataURL(blob);
- });
- }
- async function loadImageUrls(otherUrls, count=0) {
- const urls = otherUrls || [];
- if (count === 0) {
- window.alert('Loading doggo images...');
- }
- if (urls.length < 50) {
- window.scrollTo(0, 1000 * count);
- const images = document.querySelectorAll('.Post-item-media img');
- for (const image of images) {
- if (urls.indexOf(image.src) === -1) {
- const url = await getDataUrl(image.src);
- if (!url.match(/^data:text/)) {
- urls.push(url);
- }
- }
- }
- window.setTimeout(() => loadImageUrls(urls, count + 1), 2000);
- } else {
- GM.setValue('imageUrls', JSON.stringify(urls));
- window.alert('Doggo images loaded!');
- }
- }
- function createImageLoader() {
- const frame = document.createElement('iframe');
- const blocker = document.createElement('div');
- const refreshButton = document.querySelector('#doggo-refresh');
- refreshButton.onclick = async () => {
- if (await GM.getValue('imageUrls')) {
- refresh();
- refreshButton.onclick = refresh;
- } else {
- window.alert('Already loading images; please wait...');
- }
- };
- for (const el of [frame, blocker]) {
- el.width = 1000;
- el.height = 1000;
- el.style.position = 'absolute';
- el.style.top = '0';
- el.style.left = '0';
- el.style.opacity = '0';
- }
- frame.style.zIndex = '-9999';
- blocker.style.zIndex = '-9998';
- frame.src = 'https://imgur.com/t/dog';
- document.body.appendChild(frame);
- }
- async function getImageUrls() {
- const urls = await GM.getValue('imageUrls');
- if (!urls) {
- window.alert('Doggo images haven\'t loaded yet - if this is your first time using the extension, press the \'refresh\' button.');
- return false;
- }
- return JSON.parse(urls);
- }
- function resetUrls() {
- GM.deleteValue('imageUrls');
- }
- function randomArrayItem(array) {
- const index = Math.floor(Math.random()*array.length);
- return array[index];
- }
- async function doggify() {
- const urls = await getImageUrls();
- if (!urls) return;
- const images = document.querySelectorAll('img');
- for (const image of images) {
- [image.width, image.height] = [image.width, image.height]; // this sets the HTML attributes if not present
- image.srcset = '';
- image.src = randomArrayItem(urls);
- }
- }
- function refresh() {
- resetUrls();
- createImageLoader();
- }
- function createButtons() {
- const doggoButton = document.createElement('a');
- const refreshButton = document.createElement('a');
- for (const button of [doggoButton, refreshButton]) {
- button.href = 'javascript:';
- button.style.position = 'fixed';
- button.style.top = '10px';
- button.style.right = '10px';
- button.style.zIndex = '9999';
- button.style.display = 'block';
- button.style.width = '30px';
- button.style.height = '30px';
- button.style.textAlign = 'center';
- button.style.fontSize = '18px';
- button.style.lineHeight = '30px';
- button.style.textDecoration = 'none';
- button.style.borderRadius = '5px';
- button.style.backgroundColor = 'white';
- button.style.boxShadow = '0 0 10px rgba(0,0,0,0.25)';
- }
- doggoButton.onclick = doggify;
- doggoButton.textContent = '?';
- doggoButton.style.right = '50px';
- refreshButton.id = 'doggo-refresh';
- refreshButton.onclick = refresh;
- refreshButton.textContent = '?';
- refreshButton.style.right = '10px';
- document.body.appendChild(doggoButton);
- document.body.appendChild(refreshButton);
- }
- if (location.href === 'https://imgur.com/t/dog' && window.self !== window.top) {
- loadImageUrls();
- } else {
- createButtons();
- }