Greasy Fork

Greasy Fork is available in English.

区分阿里巴巴广告

让‘阿里巴巴’搜索页的广告易于分辨

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @namespace		GTBT
// @name     		alibaba-ad-distinguish
// @name:zh-CN		区分阿里巴巴广告
// @description		make it easier to distinguish the ads in alibaba's search page
// @description:zh-CN   让‘阿里巴巴’搜索页的广告易于分辨
// @version  1.4
// @match    http://s.1688.com/*
// @match    https://s.1688.com/*
// @grant    none
// @run-at   document-end
// ==/UserScript==

/*eslint curly: ["off", "multi", "consistent"]*/

console.log('!!!!!!!!!!!!!!!!!!!alibaba-ad-remove!!!!!!!!!!!!!!!!!!!!!!!!!!');
(function () {
	let verbose = 0 ? console.log : () => {};
	let debug = 0 ? console.log : () => {};
	let info = 1 ? console.info : () => {};
	function changeTreeBgColor(root, color) {
		verbose('changeTreeBgColor', root, '=>', color);
		if (!root)
			return;
		if (root.style)
			root.style.backgroundColor = color;
		for (let node of root.childNodes) {
			changeTreeBgColor(node, color);
		}
	}
	function findNodeWithText(root, text) {
		verbose('findNodeWithText', root, '<=', text);
		if (!root)
			return;
		if (root.nodeName == '#text') {
			if (root.nodeValue.includes(text))
				return root.parentNode;
			return;
		}
		for (let node of root.childNodes) {
			let ret = findNodeWithText(node, text);
			if (ret)
				return ret;
		}
	}
	function checkRemoveNodeAd(node) {
		if (node.nodeName !== 'LI')
			return;
		debug('> check node', node);
		let ad = findNodeWithText(node, '广告');
		debug('  ad ', ad);
		if (!ad /*&& !node.innerText.includes('广告')*/) {
			debug('  no ad', node.innerText);
			return;
		}

		let item = ad.closest('li');
		info('weaken ad', item.id);
		//item.remove();
		ad.setAttribute('style', 'color:yellow!important; font-weight: bold!important;');
		changeTreeBgColor(item, 'DimGray');

	}

	function removeStaticNodesAd() {
		//main list
		for (let node of document.querySelectorAll('#sm-offer-list li, .sw-layout-side ol'))
			checkRemoveNodeAd(node);
		// side bar
		/*
		document.querySelectorAll('.sw-layout-side').forEach((e, i) => {
			info(`side ${i}. ${e}`);
			//e.style.backgroundColor = 'DimGray';
			changeTreeBgColor(e, 'DimGray');
		});
		*/
	}

	function waitAndRemoveDynamicNodesAd() {
		let targetNode = document.querySelector('#sm-offer-list');
		debug('#sm-offer-list', targetNode);
		// Create an observer instance linked to the callback function
		new MutationObserver(function (mutationsList, observer) {
			for (let mutation of mutationsList) {
				if (mutation.type == 'childList') {
					debug('A child node has been added or removed.', mutation);
					for (let node of mutation.addedNodes)
						checkRemoveNodeAd(node);
				}
			}
		}).observe(targetNode, { attributes: false, childList: true, subtree: false });

		targetNode = document.querySelector('.sw-layout-side .sm-widget-p4p');
		debug('.sw-layout-side', targetNode);
		// Create an observer instance linked to the callback function
		new MutationObserver(function (mutationsList, observer) {
			for (let mutation of mutationsList) {
				if (mutation.type == 'childList') {
					debug('A child node has been added or removed.', mutation);
					for (let node of document.querySelectorAll('.sw-layout-side ol > li'))
						checkRemoveNodeAd(node);
				}
			}
		}).observe(targetNode, { attributes: false, childList: true, subtree: false });
	}
	//document.addEventListener('ready', waitAndRemove);
	removeStaticNodesAd();
	waitAndRemoveDynamicNodesAd();
})();
console.log('!!!!!!!!!!!!!!!!!!!/alibaba-ad-remove!!!!!!!!!!!!!!!!!!!!!!!!!!');