Back to Deck
УСТАНОВИТЬ
[userscript]
Kinopoisk Watch Button
ИСХОДНИК Kinopoisk
ВЕРСИЯ 1.0
АВТОР Cododel
Target Match:
- https://www.kinopoisk.ru/*
UserScript для Кинопоиска, добавляющий удобную кнопку для просмотра фильмов через альтернативный плеер (SSpoisk).
Возможности
- Интеграция в списки: Кнопка появляется рядом с кнопкой “Буду смотреть” в ленте и списках
- Интеграция на странице фильма: Кнопка добавляется в основной блок кнопок на странице фильма/сериала
- Умное обнаружение: Использует
Network Idleдля отслеживания подгрузки контента (SPA навигация) - Стилизация: Мимикрирует под интерфейс Кинопоиска
Как работает
Скрипт заменяет домен kinopoisk.ru на sspoisk.ru в ссылке, формируя прямой переход к просмотру.
Установка
- Установите расширение для UserScripts (Tampermonkey/Violentmonkey)
- Установить скрипт
- Перейдите на Кинопоиск и наслаждайтесь!
Исходный код
// ==UserScript==// @name Kinopoisk Watch Button// @namespace https://cododel.dev/// @version 1.0// @description Добавляет кнопку "Смотреть" (SSpoisk) на страницы фильмов и списки Кинопоиска// @author Cododel// @match https://www.kinopoisk.ru/*// @icon https://www.google.com/s2/favicons?sz=64&domain=kinopoisk.ru// @grant none// @updateURL https://cododel.dev/mods/kinopoisk-watch/install.user.js// @downloadURL https://cododel.dev/mods/kinopoisk-watch/install.user.js// ==/UserScript==
;(function () { 'use strict'
useNetworkidleEvents() let lastLocation = null
window.addEventListener('network-idle', () => { const currentLocation = window.location.href if (lastLocation === currentLocation) return lastLocation = currentLocation requestAnimationFrame(addWatchButtons) })
function useNetworkidleEvents() { let activeRequests = 0 let idleTimeout = null
function checkNetworkIdle() { if (activeRequests === 0) { idleTimeout = setTimeout(() => { const event = new CustomEvent('network-idle') window.dispatchEvent(event) }, 500) } }
const observer = new PerformanceObserver((list) => { list.getEntries().forEach((entry) => { if (entry.initiatorType === 'fetch' || entry.initiatorType === 'xmlhttprequest') { activeRequests++ clearTimeout(idleTimeout)
if (entry.duration > 0) { activeRequests-- checkNetworkIdle() } } }) })
observer.observe({ entryTypes: ['resource'] }) }
function addWatchButtons() { // ... полная реализация в install.user.js }})()