您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Добавляет кнопку "Flicksbar" с подменой ссылки kinopoisk.ru на sspoisk.ru в раздел "Смотреть фильм"
// ==UserScript== // @name Kinopoisk - FlicksBar Button for Google // @namespace https://t.me/flicksbar // @version 1.0.2 // @description Добавляет кнопку "Flicksbar" с подменой ссылки kinopoisk.ru на sspoisk.ru в раздел "Смотреть фильм" // @author Devitp001 // @match https://www.google.com/search* // @icon https://www.kinopoisk.ru/favicon.ico // @icon64 https://www.kinopoisk.ru/favicon.ico // @grant none // @license MIT // ==/UserScript== (function () { 'use strict'; if (!location.hostname.includes('google')) return; function log(message) { console.log(`[FlicksBar]: ${message}`); } // Поиск кнопки "Хочу посмотреть" function findWishlistButton() { return Array.from(document.querySelectorAll('*')) .flatMap(el => { if (el.shadowRoot) { return Array.from( el.shadowRoot.querySelectorAll('[aria-label=" Хочу посмотреть "]') ); } return []; }) .concat( Array.from(document.querySelectorAll('[aria-label=" Хочу посмотреть "]')) ); } // Создание кнопки "F" с точной структурой function createFlicksBarButton(referenceElement, redirectURL) { const outerDiv = document.createElement('a'); outerDiv.href = redirectURL; outerDiv.target = '_blank'; outerDiv.rel = 'noopener'; outerDiv.role = 'button'; outerDiv.tabIndex = '0'; // Копируем классы из оригинальной кнопки const originalClassList = referenceElement.classList; outerDiv.className = [...originalClassList].join(' '); // Внутренний контейнер VDgVie... const innerContainer = document.createElement('div'); innerContainer.className = 'VDgVie btku5b fCrZyc NQYJvc qVhvac zqrO0 sLl7de OJeuxf'; // Обёртка niO4u const niO4u = document.createElement('div'); niO4u.className = 'niO4u'; // kHtcsd const kHtcsd = document.createElement('div'); kHtcsd.className = 'kHtcsd'; // d3o3Ad gJdC8e const iconWrapper = document.createElement('span'); iconWrapper.className = 'd3o3Ad gJdC8e'; // RUoEBe... (иконка) const svgContainer = document.createElement('span'); svgContainer.className = '1RUoEBe K5Jxee z1asCe DoJQd'; svgContainer.style.height = '20px'; svgContainer.style.lineHeight = '20px'; svgContainer.style.width = '20px'; // SVG const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg'); svg.setAttribute('xmlns', 'http://www.w3.org/2000/svg'); svg.setAttribute('width', '24'); svg.setAttribute('height', '24'); svg.setAttribute('viewBox', '0 0 24 24'); svg.innerHTML = `<path d="M3 3 h18 v4 H6 v6 h14 v4 H6 v10 H2 zm0"/>`; svgContainer.appendChild(svg); iconWrapper.appendChild(svgContainer); kHtcsd.appendChild(iconWrapper); niO4u.appendChild(kHtcsd); // Текстовая часть const textContainer = document.createElement('div'); textContainer.className = 'QuU3Wb sjVJQd'; textContainer.setAttribute('aria-hidden', 'true'); textContainer.textContent = ' FlicksBar '; //const textDiv = document.createElement('div'); //textDiv.setAttribute('aria-hidden', 'true'); //textDiv.textContent = ' FlicksBar '; //textContainer.appendChild(textDiv); // Компоновка innerContainer.appendChild(niO4u); innerContainer.appendChild(textContainer); outerDiv.appendChild(innerContainer); return outerDiv; } // Поиск ссылки на Кинопоиск function findKinopoiskLink() { return Array.from(document.querySelectorAll('a')) .filter(link => { const href = link.href || ''; return ( href.startsWith('https://www.kinopoisk.ru/film/') || href.startsWith('https://www.kinopoisk.ru/series/') ); })[0]; } // Подмена ссылки kinopoisk.ru на sspoisk.ru function getRedirectURL(kinopoiskLink) { if (!kinopoiskLink) return null; const kinopoiskHref = kinopoiskLink.href; const sspoiskHref = kinopoiskHref.replace('kinopoisk.ru', 'sspoisk.ru'); // Вариант 1: Переход напрямую на sspoisk.ru return sspoiskHref; // Вариант 2: С редиректом через flicks.bar (если нужно) } // Вставка кнопки "F" function injectFButtonBeforeWishlist(wishlistButton) { const container = wishlistButton.closest('div, span')?.parentElement; if (!container) return; const existing = container.querySelector('a[href*="sspoisk.ru"]'); if (existing) return; // Найдём ссылку на Кинопоиск const kinopoiskLink = findKinopoiskLink(); const redirectURL = getRedirectURL(kinopoiskLink); if (!redirectURL) { log('Не удалось найти ссылку на Кинопоиск'); return; } const fButton = createFlicksBarButton(wishlistButton, redirectURL); container.insertBefore(fButton, wishlistButton); log('Добавлена кнопка "F" перед "Хочу посмотреть"'); } // Наблюдатель за изменениями DOM const observer = new MutationObserver((mutationsList) => { for (const mutation of mutationsList) { if (mutation.type === 'childList') { const wishlistButton = findWishlistButton()[0]; if (wishlistButton) { injectFButtonBeforeWishlist(wishlistButton); } } } }); observer.observe(document.body, { childList: true, subtree: true }); // Первоначальный запуск const wishlistButton = findWishlistButton()[0]; if (wishlistButton) { injectFButtonBeforeWishlist(wishlistButton); } })();