Warning: fopen(/www/sites/update.greasyfork.icu/index/store/temp/71a60e0da09a9a7e2310fab77309d86a.js): failed to open stream: No space left on device in /www/sites/update.greasyfork.icu/index/scriptControl.php on line 65
// ==UserScript==
// @name Artstation跳转8k图片
// @namespace http://tampermonkey.net/
// @version 1.6
// @description 自动将Artstation图片链接从large替换为8k并在新标签页打开
// @author You
// @match *://*artstation*/*
// @icon https://www.artstation.com/favicon.ico
// @grant none
// @run-at document-start
// @license MIT
// @downloadURL https://update.greasyfork.icu/scripts/533719/Artstation%E8%B7%B3%E8%BD%AC8k%E5%9B%BE%E7%89%87.user.js
// @updateURL https://update.greasyfork.icu/scripts/533719/Artstation%E8%B7%B3%E8%BD%AC8k%E5%9B%BE%E7%89%87.meta.js
// ==/UserScript==
(function() {
'use strict';
// 防止多次执行
if (window.artstationRedirectorLoaded) return;
window.artstationRedirectorLoaded = true;
// 检查URL是否是8k版本
function is8kVersion(url) {
return typeof url === 'string' &&
url.includes('/8k/');
}
// 定义检查URL的函数
function isArtstationLargeImage(url) {
// 匹配形如 https://cdna.artstation.com/p/assets/images/024/737/682/large/cocy-c-2.jpg?1583363541
// 确保前缀部分完全匹配
const regex = /https:\/\/cdn[a-z]?\.artstation\.com\/p\/assets\/images\/.*\/large\/.+\.jpg/i;
return regex.test(url) && !is8kVersion(url);
}
// 定义更简单的函数直接检查URL前缀和large关键词
function isArtstationImage(url) {
return typeof url === 'string' &&
url.startsWith('https://cdn') &&
url.includes('.artstation.com/p/assets/images/') &&
url.includes('/large/') &&
(url.endsWith('.jpg') || url.includes('.jpg?')) &&
!is8kVersion(url);
}
// 定义重定向函数
function redirectTo8k(url) {
// 如果已经是8k版本,不做处理
if (is8kVersion(url)) return false;
// 替换large为8k
const newUrl = url.replace('/large/', '/8k/');
// 在新标签页打开修改后的URL
window.open(newUrl, '_blank');
console.log('Artstation 8K Redirector: 重定向到', newUrl);
return true;
}
// 如果当前页面包含/8k/,则这是已经重定向的页面,不需要再处理
if (is8kVersion(window.location.href)) {
console.log('Artstation 8k Redirector: 已经是8K版本,不进行处理');
return;
}
// 拦截链接点击
document.addEventListener('click', function(event) {
// 检查是否点击了链接
let element = event.target;
while (element && element.tagName !== 'A') {
element = element.parentElement;
}
if (!element) return;
const href = element.href || '';
if (isArtstationImage(href)) {
event.preventDefault();
event.stopPropagation();
redirectTo8k(href);
}
}, true);
// 拦截图片直接打开
if (isArtstationImage(window.location.href)) {
// 如果当前页面是large图片,直接重定向到8k
window.stop(); // 停止当前页面加载
redirectTo8k(window.location.href);
}
// 监听页面加载完成
window.addEventListener('load', function() {
// 如果当前页面包含/8k/,则这是已经重定向的页面,不需要再处理
if (is8kVersion(window.location.href)) return;
// 为所有artstation图片链接添加特殊处理
const links = document.querySelectorAll('a[href*="artstation.com/p/assets/images"][href*="/large/"]');
links.forEach(function(link) {
if (isArtstationImage(link.href) && !link.hasAttribute('data-artstation-8k')) {
// 标记已处理
link.setAttribute('data-artstation-8k', 'true');
// 添加新的点击事件
link.addEventListener('click', function(e) {
e.preventDefault();
e.stopPropagation();
redirectTo8k(link.href);
}, true);
}
});
// 如果当前页面是large图片,添加提示
if (isArtstationImage(window.location.href)) {
const infoDiv = document.createElement('div');
infoDiv.style.position = 'fixed';
infoDiv.style.top = '10px';
infoDiv.style.right = '10px';
infoDiv.style.padding = '10px';
infoDiv.style.backgroundColor = 'rgba(0,0,0,0.7)';
infoDiv.style.color = 'white';
infoDiv.style.borderRadius = '5px';
infoDiv.style.zIndex = '9999';
document.body.appendChild(infoDiv);
// 5秒后隐藏提示
setTimeout(() => {
infoDiv.style.opacity = '0';
infoDiv.style.transition = 'opacity 1s';
}, 5000);
}
});
// 拦截所有图片链接(使用MutationObserver监听DOM变化)
const observer = new MutationObserver(function(mutations) {
// 如果当前页面包含/8k/,则这是已经重定向的页面,不需要再处理
if (is8kVersion(window.location.href)) return;
mutations.forEach(function(mutation) {
if (mutation.addedNodes && mutation.addedNodes.length > 0) {
for (let i = 0; i < mutation.addedNodes.length; i++) {
const node = mutation.addedNodes[i];
if (node.nodeType === 1) { // 元素节点
const links = node.querySelectorAll ? node.querySelectorAll('a[href*="artstation.com/p/assets/images"][href*="/large/"]') : [];
links.forEach(function(link) {
if (isArtstationImage(link.href) && !link.hasAttribute('data-artstation-8k')) {
link.setAttribute('data-artstation-8k', 'true');
link.addEventListener('click', function(e) {
e.preventDefault();
e.stopPropagation();
redirectTo8k(link.href);
}, true);
}
});
}
}
}
});
});
// 配置观察选项
const config = { childList: true, subtree: true };
// 开始监听文档变化
observer.observe(document, config);
})();