Kinopoisk Watch Button | Cododel
CODODELDEV
EN / RU
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 в ссылке, формируя прямой переход к просмотру.

Установка

  1. Установите расширение для UserScripts (Tampermonkey/Violentmonkey)
  2. Установить скрипт
  3. Перейдите на Кинопоиск и наслаждайтесь!

Исходный код

// ==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
}
})()
[ ▲ 0 ]