您需要先安装一个扩展,例如 篡改猴、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);
- }
- })();