Kinopoisk Watch Button | Cododel
CODODELDEV
EN / RU
Back to Deck
[userscript]

Kinopoisk Watch Button

INSTALL
SOURCE Kinopoisk
VERSION 1.0
AUTHOR Cododel

Target Match:

  • https://www.kinopoisk.ru/*

A UserScript for Kinopoisk that adds a convenient button to watch movies via an alternative player (SSpoisk).

Features

  • List Integration: The button appears next to the “Will Watch” button in feeds and lists
  • Movie Page Integration: The button is added to the main button block on the movie/series page
  • Smart Detection: Uses Network Idle to track content loading (SPA navigation)
  • Styling: Mimics the Kinopoisk interface

How it works

The script replaces the kinopoisk.ru domain with sspoisk.ru in the link, generating a direct link to watch.

Installation

  1. Install a UserScript extension (Tampermonkey/Violentmonkey)
  2. Install the script
  3. Navigate to Kinopoisk and enjoy!

Source Code

// ==UserScript==
// @name Kinopoisk Watch Button
// @namespace https://cododel.dev/
// @version 1.0
// @description Adds "Watch" button (SSpoisk) to Kinopoisk movie pages and lists
// @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() {
// ... full implementation in install.user.js
}
})()
[ ▲ 0 ]