您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
禁用淘宝、天猫、1688等电商平台的js-image-zoom效果,方便右键保存图片。
当前为
// ==UserScript== // @name 禁用电商平台图片缩放效果 // @name:en Disable E-commerce Image Zoom Effect // @namespace http://greasyfork.icu/users/3001-hanjian-wu // @version 1.3.0 // @description 禁用淘宝、天猫、1688等电商平台的js-image-zoom效果,方便右键保存图片。 // @description:en Disable js-image-zoom effect on Taobao, Tmall, 1688 and other e-commerce platforms for easy right-click image saving. Fully fixed right-click direct access to images // @author hanjian wu // @homepage http://greasyfork.icu/users/3001-hanjian-wu // @supportURL http://greasyfork.icu/users/3001-hanjian-wu // @license MIT // @match https://detail.tmall.com/* // @match https://item.taobao.com/* // @match https://detail.1688.com/* // @match https://www.tmall.com/p/* // @match https://www.taobao.com/item/* // @match https://www.1688.com/offer/* // @match https://*.tmall.com/item.htm* // @match https://*.taobao.com/item.htm* // @match https://*.1688.com/offer/*.html* // @icon data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZpZXdCb3g9IjAgMCA2NCA2NCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3Qgd2lkdGg9IjY0IiBoZWlnaHQ9IjY0IiByeD0iOCIgZmlsbD0iIzAwN0FGRiIvPgo8cGF0aCBkPSJNMTYgMTZIMzJWMzJIMTZWMTZaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNMzYgMTZINDhWMjhIMzZWMTZaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNMTYgMzZIMjhWNDhIMTZWMzZaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNMzIgMzJINDhWNDhIMzJWMzJaIiBmaWxsPSJ3aGl0ZSIgZmlsbC1vcGFjaXR5PSIwLjciLz4KPC9zdmc+ // @grant none // @run-at document-start // @noframes // @compatible chrome // @compatible firefox // @compatible edge // @compatible safari // ==/UserScript== (function() { 'use strict'; console.log('电商图片缩放禁用脚本已启动 v1.3.0'); // 检测当前平台 const is1688 = window.location.hostname.includes('1688.com'); const isTaobao = window.location.hostname.includes('taobao.com'); const isTmall = window.location.hostname.includes('tmall.com'); let zoomEventBlocked = false; // 禁用图片缩放的主要函数 function disableImageZoom() { if (is1688) { handle1688Zoom(); } else { handleTaobaoTmallZoom(); } } // 处理1688的缩放 function handle1688Zoom() { const zoomElements = document.querySelectorAll('.scale-img, .scaled-img'); zoomElements.forEach(el => { if (el.style.display !== 'none') { el.style.display = 'none !important'; el.style.visibility = 'hidden !important'; el.style.opacity = '0 !important'; el.style.pointerEvents = 'none !important'; } }); // 确保主图片可以右键 const previewImg = document.querySelector('.detail-gallery-preview .preview-img'); if (previewImg) { enableImageRightClick(previewImg); } } // 处理淘宝/天猫的缩放 - 重点修复右键问题 function handleTaobaoTmallZoom() { // 隐藏缩放相关元素 const zoomElements = document.querySelectorAll('.js-image-zoom__zoomed-area, .js-image-zoom__zoomed-image, #lensDiv'); zoomElements.forEach(el => { el.style.display = 'none !important'; el.style.visibility = 'hidden !important'; el.style.opacity = '0 !important'; el.style.pointerEvents = 'none !important'; }); // 关键修复:让容器的鼠标事件穿透到图片 const mainPicWrappers = document.querySelectorAll('._6ebaNqGH1t--mainPicWrap--b82041ed'); mainPicWrappers.forEach(wrapper => { // 让容器的鼠标事件穿透 wrapper.style.pointerEvents = 'none'; // 找到其中的图片并确保可以接收鼠标事件 const mainPic = wrapper.querySelector('._6ebaNqGH1t--mainPic--_8729489'); if (mainPic) { // 让图片重新获得鼠标事件 mainPic.style.pointerEvents = 'auto'; mainPic.style.position = 'relative'; mainPic.style.zIndex = '999'; enableImageRightClick(mainPic); console.log('已修复图片右键功能:', mainPic.src); } }); // 确保缩略图可以点击切换 const thumbnails = document.querySelectorAll('._6ebaNqGH1t--thumbnail--e3bf7146'); thumbnails.forEach(thumb => { thumb.style.pointerEvents = 'auto'; const thumbImg = thumb.querySelector('._6ebaNqGH1t--thumbnailPic--_2b4183e'); if (thumbImg) { thumbImg.style.pointerEvents = 'auto'; } }); // 确保切换标签可以点击 const switchTabs = document.querySelectorAll('._6ebaNqGH1t--switchTabsItem--a42e6b76'); switchTabs.forEach(tab => { tab.style.pointerEvents = 'auto'; }); } // 启用图片右键功能 function enableImageRightClick(img) { if (!img) return; // 确保图片可以接收鼠标事件 img.style.pointerEvents = 'auto'; img.style.userSelect = 'auto'; img.style.webkitUserSelect = 'auto'; img.style.mozUserSelect = 'auto'; img.style.msUserSelect = 'auto'; // 移除所有可能阻止右键的事件处理器 img.oncontextmenu = null; img.ondragstart = null; img.onselectstart = null; img.onmousedown = null; img.onmouseup = null; // 移除事件监听器(如果存在) const events = ['contextmenu', 'dragstart', 'selectstart', 'mousedown', 'mouseup']; events.forEach(eventType => { img.removeEventListener(eventType, preventDefault, true); img.removeEventListener(eventType, preventDefault, false); }); // 添加强制允许右键的事件监听器 img.addEventListener('contextmenu', function(e) { e.stopPropagation(); console.log('图片右键菜单已启用'); return true; }, true); img.addEventListener('mousedown', function(e) { if (e.button === 2) { // 右键 e.stopPropagation(); console.log('图片右键点击已启用'); return true; } }, true); } // 阻止事件的通用函数 function preventDefault(e) { e.preventDefault(); e.stopPropagation(); return false; } // 精准的事件拦截 function blockZoomEvents() { if (zoomEventBlocked) return; zoomEventBlocked = true; // 拦截可能的缩放函数 if (window.ImageZoom) { window.ImageZoom = function() { console.log('ImageZoom 被禁用'); }; } // 拦截容器上的缩放事件,但保留其他功能 const originalAddEventListener = Element.prototype.addEventListener; Element.prototype.addEventListener = function(type, listener, options) { // 对于主图片容器,只拦截可能的缩放事件 const isMainPicContainer = this.classList && this.classList.contains('_6ebaNqGH1t--mainPicWrap--b82041ed'); const isZoomMouseEvent = (type === 'mousemove' || type === 'mouseover' || type === 'mouseenter'); if (isMainPicContainer && isZoomMouseEvent) { const listenerStr = listener.toString(); if (listenerStr.includes('zoom') || listenerStr.includes('scale') || listenerStr.includes('lens')) { console.log('拦截了容器缩放事件:', type); return; } } // 对于1688 const is1688ZoomElement = this.classList && (this.classList.contains('scale-img') || this.classList.contains('scaled-img')); if (is1688ZoomElement) { console.log('拦截了1688缩放事件:', type); return; } return originalAddEventListener.call(this, type, listener, options); }; } // 添加CSS样式 function addZoomDisableStyles() { const style = document.createElement('style'); style.id = 'zoom-disable-styles'; if (is1688) { style.textContent = ` /* 1688 缩放元素禁用 */ .detail-gallery-preview .scale-img, .detail-gallery-preview .scaled-img { display: none !important; visibility: hidden !important; opacity: 0 !important; pointer-events: none !important; } /* 确保1688图片可以右键 */ .detail-gallery-preview .preview-img { pointer-events: auto !important; user-select: auto !important; -webkit-user-select: auto !important; position: relative !important; z-index: 999 !important; } `; } else { style.textContent = ` /* 淘宝天猫缩放元素禁用 */ .js-image-zoom__zoomed-area, .js-image-zoom__zoomed-image, #lensDiv { display: none !important; visibility: hidden !important; opacity: 0 !important; pointer-events: none !important; } /* 关键修复:让容器鼠标事件穿透,图片获得最高优先级 */ ._6ebaNqGH1t--mainPicWrap--b82041ed { pointer-events: none !important; } /* 让主图片重新获得鼠标事件和最高层级 */ ._6ebaNqGH1t--mainPic--_8729489 { pointer-events: auto !important; user-select: auto !important; -webkit-user-select: auto !important; -moz-user-select: auto !important; -ms-user-select: auto !important; position: relative !important; z-index: 999 !important; -webkit-touch-callout: default !important; -webkit-user-select: auto !important; -khtml-user-select: auto !important; } /* 确保缩略图可以点击 */ ._6ebaNqGH1t--thumbnail--e3bf7146, ._6ebaNqGH1t--thumbnailPic--_2b4183e { pointer-events: auto !important; } /* 确保切换标签可以点击 */ ._6ebaNqGH1t--switchTabsItem--a42e6b76 { pointer-events: auto !important; } /* 确保缩略图容器可以交互 */ ._6ebaNqGH1t--thumbnailsWrap--_9878a4b, ._6ebaNqGH1t--thumbnails--_45f4c28 { pointer-events: auto !important; } /* 确保底部切换标签容器可以交互 */ ._6ebaNqGH1t--bottomSwitchTabsWrap--e5402120, ._6ebaNqGH1t--switchTabsWrap--_6fda09c { pointer-events: auto !important; } `; } if (!document.getElementById('zoom-disable-styles')) { document.head.appendChild(style); } } // 强制移除右键阻止 function forceEnableRightClick() { // 移除可能的全局右键阻止 document.oncontextmenu = null; document.onselectstart = null; document.ondragstart = null; // 移除body上的右键阻止 if (document.body) { document.body.oncontextmenu = null; document.body.onselectstart = null; document.body.ondragstart = null; } } // 监控动态变化 function setupObserver() { const observer = new MutationObserver(function(mutations) { mutations.forEach(function(mutation) { if (mutation.type === 'childList') { mutation.addedNodes.forEach(function(node) { if (node.nodeType === 1) { // 处理新添加的主图片 if (!is1688) { const newMainPics = node.querySelectorAll ? node.querySelectorAll('._6ebaNqGH1t--mainPic--_8729489') : []; newMainPics.forEach(img => { img.style.pointerEvents = 'auto'; img.style.position = 'relative'; img.style.zIndex = '999'; enableImageRightClick(img); console.log('新图片右键功能已启用:', img.src); }); // 处理新添加的容器 const newWrappers = node.querySelectorAll ? node.querySelectorAll('._6ebaNqGH1t--mainPicWrap--b82041ed') : []; newWrappers.forEach(wrapper => { wrapper.style.pointerEvents = 'none'; }); } // 处理新添加的缩放元素 if (is1688) { if (node.classList && (node.classList.contains('scale-img') || node.classList.contains('scaled-img'))) { node.style.display = 'none'; node.style.pointerEvents = 'none'; } const zoomElements = node.querySelectorAll('.scale-img, .scaled-img'); zoomElements.forEach(el => { el.style.display = 'none'; el.style.pointerEvents = 'none'; }); } else { if (node.classList && (node.classList.contains('js-image-zoom__zoomed-area') || node.classList.contains('js-image-zoom__zoomed-image'))) { node.style.display = 'none'; node.style.pointerEvents = 'none'; } const zoomElements = node.querySelectorAll('.js-image-zoom__zoomed-area, .js-image-zoom__zoomed-image'); zoomElements.forEach(el => { el.style.display = 'none'; el.style.pointerEvents = 'none'; }); } } }); } }); }); observer.observe(document.body, { childList: true, subtree: true }); } // 初始化函数 function init() { console.log('初始化电商图片缩放禁用脚本...'); blockZoomEvents(); addZoomDisableStyles(); disableImageZoom(); forceEnableRightClick(); setupObserver(); // 延迟执行,确保页面完全加载 setTimeout(() => { disableImageZoom(); forceEnableRightClick(); console.log('延迟修复完成'); }, 1000); setTimeout(() => { disableImageZoom(); forceEnableRightClick(); console.log('二次延迟修复完成'); }, 3000); } // 启动脚本 if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); } // 定期维护 setInterval(() => { disableImageZoom(); forceEnableRightClick(); }, 5000); console.log('电商图片缩放禁用脚本加载完成 v1.3.0 - 专门修复右键问题'); })();