Scriptlets icon indicating copy to clipboard operation
Scriptlets copied to clipboard

Improve 'trusted-create-element' — allow creation of inner elements for created iframe

Open Yuki2718 opened this issue 1 year ago • 0 comments

wiki.yjsnpi.nu removes images if they detect blocker on any subpages having images (ex. https://wiki.yjsnpi.nu/wiki/%E3%81%9B%E3%81%84%E3%82%84), and if I understand correctly, they check not only iframes created by i-mobile.co.jp script but also their inner elements having .creative class with this code (it's under cat-and-mouse game, the code may change):

Code
if (document.getElementsByName('noad').length !== 1) {
		let detected = false;

		if (!detected) {
			const iframes = document.querySelectorAll('iframe');
			iframes.forEach((iframe) => {
				const computedStyle = window.getComputedStyle(iframe, null);
				if (computedStyle.display === 'none' || computedStyle.height === '0px') { detected = true; return; }
			});
		}

		if (detected) {
			const elms = document.querySelectorAll('span:has(>img), .page-' + RLCONF['wgArticleId'] + ' img, a:has(>img)');
			elms.forEach((elm) => { elm.style.height = '0'; });
			elms.forEach((elm) => { elm.style.opacity = '0'; });
			elms.forEach((elm) => { elm.style.visibility = 'hidden'; })
			elms.forEach((elm) => { elm.style.display = 'none'; });
			elms.forEach((elm) => { elm.remove(); });
			document.querySelector('.mw-page-container, #content').style.backgroundColor = '#fdfdfd';
		}

		if (!detected) {
			new MutationObserver((mutationList, observer) => {
				if (document.getElementById('comments-loading') === null) {
					let detected = false;
					if (document.querySelectorAll('iframe').length === 0) { detected = true; }
					const im = document.querySelectorAll('.im');
					if (im.length === 0) { detected = true; }
					im.forEach((im) => {
						const iframes = im.querySelectorAll('iframe');
						if (iframes.length === 0) { detected = true; return; }
						iframes.forEach((iframe) => {
							const contentDocument = iframe.contentDocument;
							if (contentDocument.querySelector('.creative') === null) { detected = true; return; }
						});
						if (detected) { return; }
					});
					if (detected) {
						const elms = document.querySelectorAll('span:has(>img), .page-' + RLCONF['wgArticleId'] + ' img, a:has(>img)');
						elms.forEach((elm) => { elm.style.height = '0'; });
						elms.forEach((elm) => { elm.style.opacity = '0'; });
						elms.forEach((elm) => { elm.style.visibility = 'hidden'; })
						elms.forEach((elm) => { elm.style.display = 'none'; });
						elms.forEach((elm) => { elm.remove(); });
						document.querySelector('.mw-page-container, #content').style.backgroundColor = '#fdfdfd';
					}
					observer.disconnect();
				}
			}).observe(document.getElementById('bodyContent'), { attributes: false, childList: true, subtree: true });
		}
	}

Yuki2718 avatar Oct 15 '24 04:10 Yuki2718