Добавляет кнопку "Flicksbar" с подменой ссылки kinopoisk.ru на sspoisk.ru в раздел "Смотреть фильм"
当前为
// ==UserScript==
// @name Kinopoisk - FlicksBar Button for Google
// @namespace https://t.me/flicksbar
// @version 1.0.1
// @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="M8 5.5v13l9-6.5-9-6.5z"></path>`;
//svg.innerHTML = ` <path d="M0 0 h24 v24 H5 v3 h14 v2 H5 v5 H3 zm0" stroke="#888"/>`;
svg.innerHTML = `<path d="M3 3 h18 v2 H5 v3 h14 v2 H5 v5 H3 zm0" stroke="#888"/>`;
svg.innerHTML = `<path d="M3 3 h18 v2 H5 v3 h14 v2 H5 v5 H3 zm0" stroke="#888"/>`;
svg.innerHTML = `<path d="M3 3 h18 v2 H5 v3 h14 v2 H5 v5 H3 zm0" stroke="#888"/>`;
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);
}
})();