Bypass "open in app" prompts, unblur NSFW content & thumbnails, remove spoiler overlays.
当前为
// ==UserScript==
// @name Reddit Bypass Enhancer
// @version 2.5
// @description Bypass "open in app" prompts, unblur NSFW content & thumbnails, remove spoiler overlays.
// @author UniverseDev
// @license GPL-3.0-or-later
// @match https://www.reddit.com/*
// @match https://sh.reddit.com/*
// @grant none
// @run-at document-start
// @noframes
// @namespace https://greasyfork.org/en/users/1030895-universedev
// ==/UserScript==
'use strict';
(function () {
const SELECTORS = {
nsfwModal: 'shreddit-async-loader[bundlename*="nsfw_blocking_modal"]',
promptContainer: 'xpromo-nsfw-blocking-container',
prompt: '.prompt',
blurredContainer: 'shreddit-blurred-container',
thumbnailBlur: '.thumbnail-blur',
communityHighlightCard: 'community-highlight-card[blurred]',
imageFilter: 'img.mb-0.h-full.w-full.object-cover[style*="filter"]',
video: 'shreddit-player, video.blur',
blurredSpan: 'span.inner.blurred',
scrim: '.absolute.top-0.left-0.w-full.h-full.bg-scrim',
spoilerOverlay: '.absolute.inset-0.overflow-visible.flex.items-center.justify-center'
};
function queryElementsDeep(selector, root = document) {
const elements = new Set();
try {
root.querySelectorAll(selector).forEach(el => elements.add(el));
root.querySelectorAll('*').forEach(el => {
if (el.shadowRoot) {
el.shadowRoot.querySelectorAll(selector).forEach(shadowEl => elements.add(shadowEl));
}
});
} catch (error) {
console.error("Error in queryElementsDeep:", error);
}
return [...elements];
}
function removeNSFWBlock() {
try {
document.querySelector(SELECTORS.nsfwModal)?.remove();
document.getElementById("nsfw-qr-dialog")?.remove();
document.querySelector("body > div:nth-child(7)")?.remove();
const promptContainer = document.querySelector(SELECTORS.promptContainer);
promptContainer?.shadowRoot?.querySelector(SELECTORS.prompt)?.remove();
queryElementsDeep(SELECTORS.blurredContainer).forEach(container => {
const firstChild = container.firstElementChild;
if (firstChild) {
firstChild.addEventListener('click', e => {
e.preventDefault();
if (e.target.closest('media-telemetry-observer')) {
e.stopPropagation();
}
e.target.click();
}, { once: true });
firstChild.click();
}
});
queryElementsDeep(SELECTORS.thumbnailBlur).forEach(el => el.classList.remove('thumbnail-blur'));
queryElementsDeep(SELECTORS.communityHighlightCard).forEach(card => card.removeAttribute('blurred'));
queryElementsDeep(SELECTORS.imageFilter).forEach(img => img.style.removeProperty('filter'));
queryElementsDeep(SELECTORS.video).forEach(video => video.classList.remove('blur'));
queryElementsDeep(SELECTORS.blurredSpan).forEach(span => span.style.removeProperty('filter'));
queryElementsDeep(SELECTORS.scrim).forEach(scrim => scrim.remove());
queryElementsDeep(SELECTORS.spoilerOverlay).forEach(spoiler => spoiler.remove());
} catch (error) {
console.error("Error in removeNSFWBlock:", error);
}
}
const observer = new MutationObserver(mutations => {
let shouldRun = false;
for (const mutation of mutations) {
if (mutation.addedNodes.length) {
shouldRun = true;
break;
}
}
if (shouldRun) removeNSFWBlock();
});
observer.observe(document.documentElement, { childList: true, subtree: true });
const shredditCheckInterval = setInterval(() => {
if (!document.querySelector('shreddit-app')) {
observer.disconnect();
clearInterval(shredditCheckInterval);
}
}, 5000);
})();