\n\n```\n\nНюансы:\n- Скрипт `https://vk.com/js/api/videoplayer.js` должен загрузиться до вызова `VK.VideoPlayer` (или вызывать инициализацию в обработчике `onload` этого скрипта). \n- Если видео приватное/требует авторизации — плеер может не инициализироваться. \n- После инициализации объект плеера содержит набор методов и событий (в разных версиях API названия методов могут отличаться) — посмотрите `console.dir(player)` в DevTools, чтобы увидеть доступные API.\n\nПодробнее о привычном VOD‑паттерне — в официальной документации: [VK Developer Documentation](https://dev.vk.com/ru/widgets/video) и примерах сообщества: [qna.habr.com](https://qna.habr.com/q/1302430).\n\n---\n\n## Примеры кода: подписка на события плеера в JavaScript (play/pause/ended) {#player-events}\n\nAPI у разных версий плеера может немного отличаться, потому универсальный приём — сначала инспектировать объект, затем подписаться на доступные методы. Пример «безопасной» подписки, которая проверяет несколько вариантов API:\n\n```javascript\nfunction subscribeEvent(player, evt, handler) {\n if (!player) return;\n if (typeof player.on === 'function') {\n player.on(evt, handler); // часто встречается\n } else if (typeof player.addEventListener === 'function') {\n player.addEventListener(evt, handler);\n } else if (typeof player.bind === 'function') {\n player.bind(evt, handler);\n } else {\n console.warn('No event API found on VK player — will attempt polling', evt);\n }\n}\n\n// Пример использования (после успешной инициализации VK.VideoPlayer)\nsubscribeEvent(player, 'play', () => console.log('play'));\nsubscribeEvent(player, 'pause', () => console.log('pause'));\nsubscribeEvent(player, 'ended', () => console.log('ended'));\nsubscribeEvent(player, 'timeupdate', (t) => console.log('time', t));\n```\n\nЕсли событий нет или API ограничен — используйте fallback: короткий polling (раз в 1–2 с) с проверкой доступных методов у объекта:\n```javascript\n// Polling-safe пример\nlet lastTime = 0;\nconst poll = setInterval(() => {\n if (!player) return;\n if (typeof player.getCurrentTime === 'function') {\n const t = player.getCurrentTime();\n if (t !== lastTime) {\n // проигрывание идёт\n lastTime = t;\n }\n } else if ('currentTime' in player) {\n const t = player.currentTime;\n if (t !== lastTime) lastTime = t;\n } else {\n // нет API - остановить polling или перейти к серверному подходу\n clearInterval(poll);\n }\n}, 1000);\n```\n\nНо помните: доступ к свойствам iframe‑вложенного DOM запрещён из-за CORS — polling тут возможен только если API плеера предоставляет методы (postMessage) или если вы используете свой собственный video элемент (см. HLS ниже).\n\nЕсли вы можете получить прямой поток (MP4/HLS), то лучший и самый надёжный путь — подключить внешний плеер (`hls.js` / `video.js`) и подписываться на стандартные события HTMLMediaElement (`playing`, `pause`, `ended`) — пример ниже в разделе Обходы.\n\n---\n\n## Почему live.vkvideo.ru не распознаётся — ограничения для vk live stream {#live-limitations}\n\nПричины, почему ваш код с `https://live.vkvideo.ru/app/embed/...&js_api=1` не работает:\n\n- другой домен и другой шаблон embed — официальный `VK.VideoPlayer` ожидает `vk.com/video_ext.php` (проверка в коде плеера), поэтому он бросает `iframe src is not a VK embed` (см. [vk.com/js/api/videoplayer.js](https://vk.com/js/api/videoplayer.js)); \n- live‑плеер может реализован совсем иначе (специализированный player на live.vkvideo.ru) и не поддерживает js_api handshake; \n- трансляции по сути «поточные» и окончание трансляции может не отражаться событием `ended` у плеера — платформа может просто перестать выдавать сегменты или показывать оффлайн страницу; обсуждение таких ограничений — на [StackOverflow RU](https://ru.stackoverflow.com/questions/1444459/Управление-vk-видео-через-js) и в описании live‑платформы [live.vkvideo.ru](https://live.vkvideo.ru/). \n\nЧто это значит практично? Нельзя заставить `VK.VideoPlayer` работать с iframe, который он не распознаёт. Нельзя надеяться, что `play`/`ended` будут приходить, если плеер на стороне сервиса не передаёт эти события.\n\n---\n\n## Обходные варианты для отслеживания старта/остановки трансляции (HLS, серверный мониторинг, неофициальные API) {#workarounds}\n\nЕсли нельзя использовать `VK.VideoPlayer` для live.vkvideo.ru — есть рабочие альтернативы. Выбор зависит от доступа к прямым потокам и от требований к надёжности.\n\n1) Подключить прямой HLS (m3u8) к внешнему плееру (рекомендуется, если у вас есть URL m3u8) \n- Используйте hls.js / video.js: вы получите стандартные события медиаплеера. Пример:\n```html\n\n\n\n```\n- Минусы: нужен прямой доступ к manifest (CORS) и стабильный URL.\n\n2) Серверный мониторинг манифеста (надежно для оповещений) \n- Сервер опрашивает HLS manifest (или RTMP ingest/статус) и решает, онлайн ли поток. Затем оповещает клиентов через WebSocket/SSE/webhook. Это обходной, надёжный путь, работает независимо от возможностей embed. Пример Node.js‑логики:\n```javascript\nconst axios = require('axios');\nsetInterval(async () => {\n try {\n const res = await axios.get('https://cdn.example.com/live/stream/playlist.m3u8', { timeout: 5000 });\n const data = res.data;\n const isLive = data.includes('#EXTINF') && !data.includes('#EXT-X-ENDLIST');\n // если состояние изменилось — уведомить клиентов\n } catch (e) {\n // 404/timeout => возможно offline\n }\n}, 15000);\n```\n- Минусы: нужно серверное место, возможны ограничения доступа к CDN (авторизация/CORS).\n\n3) Неформальные/неофициальные API и парсинг страницы \n- Есть проекты в сообществе, которые пытаются получить метаданные трансляций у vkplay.live — например [unofficial-vk-play-live-api](https://github.com/Something-Went-Wrong-ORG/unofficial-vk-play-live-api). Но они нестабильны и могут нарушать правила — используйте с осторожностью. \n- Для быстрых решений иногда парсят страницу трансляции или используют streamlink/CLI (см. обсуждение [streamlink issue](https://github.com/streamlink/streamlink/issues/879)). Минус: ненадёжно и может быть запрещено правилами сервиса.\n\n4) Запросить официальные webhooks / API (если доступны) \n- Иногда платформа предоставляет серверные уведомления о старте/остановке — стоит проверить документацию платформы или обратиться в поддержку.\n\nИтог: если вы не можете получить прямой поток — лучшая схема для надёжности: серверный мониторинг + нотификации клиентам. Если есть прямой m3u8 — используйте hls.js и стандартные события HTMLMediaElement.\n\n---\n\n## Отладка: ошибка \"iframe src is not a VK embed\" — чеклист {#debugging}\n\nБыстрая проверка — пройдите этот чеклист по порядку:\n\n- Проверьте src iframe — он должен быть `https://vk.com/video_ext.php?...&js_api=1`. Если нет — замените на корректный embed (получите код в ВК). \n- Проверьте наличие параметра `js_api=1` в URL — без него скрипт не активирует JS API. \n- Убедитесь, что `` загружен ДО вызова `VK.VideoPlayer` (или инициализация выполняется в onload скрипта/iframe). \n- Подождите загрузки iframe (`iframe.addEventListener('load', ...)`) — инициализируйте внутри обработчика. \n- Посмотрите в консоль: `console.dir(VK)` и `console.dir(player)` — это покажет доступные методы/события. \n- Если видео приватное/под авторизацией — проверьте, виден ли embed в режиме инкогнито. \n- Если нужен мониторинг live — подумайте о серверном опросе manifest (см. выше). \n- Примеры и объяснения ошибок ищите в обсуждениях: [StackOverflow RU](https://ru.stackoverflow.com/questions/1444459/Управление-vk-видео-через-js) и в официальной документации [VK Widgets — Video](https://dev.vk.com/ru/widgets/video).\n\nЕсли после всех проверок проблема остаётся — пришлите точный iframe src (можно без hash) и скрин консоли — помогу с конкретикой.\n\n---\n\n## Источники {#sources}\n\n- [https://dev.vk.com/ru/widgets/video](https://dev.vk.com/ru/widgets/video) \n- [https://vk.com/js/api/videoplayer.js](https://vk.com/js/api/videoplayer.js) \n- [https://ru.stackoverflow.com/questions/1444459/Управление-vk-видео-через-js](https://ru.stackoverflow.com/questions/1444459/Управление-vk-видео-через-js) \n- [https://qna.habr.com/q/1302430](https://qna.habr.com/q/1302430) \n- [https://live.vkvideo.ru/](https://live.vkvideo.ru/) \n- [https://github.com/Something-Went-Wrong-ORG/unofficial-vk-play-live-api](https://github.com/Something-Went-Wrong-ORG/unofficial-vk-play-live-api) \n- [https://github.com/streamlink/streamlink/issues/879](https://github.com/streamlink/streamlink/issues/879) \n- [https://stackoverflow.com/questions/38969996/vk-com-embed-set-start-time-and-hide-controls](https://stackoverflow.com/questions/38969996/vk-com-embed-set-start-time-and-hide-controls)\n\n---\n\n## Заключение {#conclusion}\n\nКоротко: ваш текущий iframe с `live.vkvideo.ru` не совместим с `VK.VideoPlayer` — отсюда ошибка `iframe src is not a VK embed`. Если цель — отслеживать vk события через `VK.VideoPlayer`, используйте `video_ext.php?...&js_api=1` (VOD). Для live‑трансляций надежнее получить прямой поток (HLS) и подключить `hls.js`/`video.js` или реализовать серверный мониторинг manifest (оповещения через WebSocket/SSE). Нужна помощь с конкретной реализацией (например, пример на hls.js + серверный poll для m3u8 или готовый серверный webhook)? Могу подготовить рабочий пример под ваш кейс."},{"@type":"QAPage","@context":"https://schema.org","mainEntity":{"name":"Как получить события от VK.VideoPlayer с помощью JavaScript для отслеживания запуска и остановки трансляций?","text":"Как инициализировать VK.VideoPlayer для iframe с live.vkvideo.ru, подписаться на события play/pause/ended и обойти ошибку 'iframe src is not a VK embed' для трансляций?","@type":"Question","acceptedAnswer":{"text":"VK.VideoPlayer работает только с video_ext.php&js_api=1 (VOD). Для live используйте HLS с hls.js, серверный мониторинг m3u8 или неофициальные API. Примеры кода для событий и отладки.","@type":"Answer","upvoteCount":13,"dateCreated":"2025-11-13T10:50:55.097Z","datePublished":"2025-11-13T10:50:55.097Z","dateModified":"2026-01-10T17:24:13.022Z","author":[{"@type":"Organization","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/about","name":"НейроОтветы","url":"https://xn--b1afbosiaouc3h.xn--p1ai/about","logo":{"@type":"ImageObject","url":"https://xn--b1afbosiaouc3h.xn--p1ai/logo.png","width":"512","height":"512"}}],"url":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/vk-videoplayer-events-javascript-live-tracking/#message-fba2c5b9-62f8-40c1-8f4e-61320c89896e"},"@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/vk-videoplayer-events-javascript-live-tracking","answerCount":1,"dateCreated":"2025-11-13T10:50:55.097Z","datePublished":"2025-11-13T10:50:55.097Z","dateModified":"2026-01-10T17:24:13.022Z","author":[{"@type":"Organization","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/about","name":"НейроОтветы","url":"https://xn--b1afbosiaouc3h.xn--p1ai/about","logo":{"@type":"ImageObject","url":"https://xn--b1afbosiaouc3h.xn--p1ai/logo.png","width":"512","height":"512"}}]},"mainEntityOfPage":{"@type":"WebPage","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/vk-videoplayer-events-javascript-live-tracking"},"inLanguage":"ru","dateCreated":"2025-11-13T10:50:55.097Z","datePublished":"2025-11-13T10:50:55.097Z","dateModified":"2026-01-10T17:24:13.022Z","author":[{"@type":"Organization","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/about","name":"НейроОтветы","url":"https://xn--b1afbosiaouc3h.xn--p1ai/about","logo":{"@type":"ImageObject","url":"https://xn--b1afbosiaouc3h.xn--p1ai/logo.png","width":"512","height":"512"}}],"publisher":{"@type":"Organization","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/about","name":"НейроОтветы","url":"https://xn--b1afbosiaouc3h.xn--p1ai/about","logo":{"@type":"ImageObject","url":"https://xn--b1afbosiaouc3h.xn--p1ai/logo.png","width":"512","height":"512"}},"@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/vk-videoplayer-events-javascript-live-tracking"},{"@type":"CollectionPage","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/vk-videoplayer-events-javascript-live-tracking/#related-questions","name":"Как получить события VK.VideoPlayer в JavaScript для live","description":"Отслеживание vk события play, pause, ended в VK.VideoPlayer: инициализация iframe с js_api=1, ошибки для live.vkvideo.ru, примеры кода, обходные пути с HLS и мониторингом трансляций.","url":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/vk-videoplayer-events-javascript-live-tracking","inLanguage":"ru","mainEntity":{"@type":"ItemList","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/vk-videoplayer-events-javascript-live-tracking/#related-questions","itemListElement":[{"@type":"ListItem","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/prevent-duplicate-tilda-form-submissions","name":"Tilda формы: запрет повторной отправки с JS","position":1,"item":{"@type":"Article","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/prevent-duplicate-tilda-form-submissions","mainEntityOfPage":{"@type":"WebPage","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/prevent-duplicate-tilda-form-submissions"},"inLanguage":"ru","dateCreated":"2025-11-07T10:54:47.023Z","datePublished":"2025-11-07T10:54:47.023Z","dateModified":"2026-01-12T07:47:41.552Z","author":[{"@type":"Organization","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/about","name":"НейроОтветы","url":"https://xn--b1afbosiaouc3h.xn--p1ai/about","logo":{"@type":"ImageObject","url":"https://xn--b1afbosiaouc3h.xn--p1ai/logo.png","width":"512","height":"512"}}],"publisher":{"@type":"Organization","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/about","name":"НейроОтветы","url":"https://xn--b1afbosiaouc3h.xn--p1ai/about","logo":{"@type":"ImageObject","url":"https://xn--b1afbosiaouc3h.xn--p1ai/logo.png","width":"512","height":"512"}},"headline":"Tilda формы: запрет повторной отправки с JS","description":"Настройка формы Tilda для запрета дубликатов: используйте localStorage и MutationObserver. Пошаговый гайд по добавлению JS в блок T123, отслеживанию успеха отправки без ID и показу сообщения при повторном клике. Идеально для форм заявок и всплывающих модалок.","keywords":["tilda формы","tilda формы обратной связи","форма заявки tilda","настройка формы tilda","форма tilda zero block","tilda javascript форма"],"image":[],"articleBody":""}},{"@type":"ListItem","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/cross-domain-post-request-javascript-fetch-cors","name":"Кросс-доменный POST-запрос в JS: Fetch без обновления","position":2,"item":{"@type":"Article","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/cross-domain-post-request-javascript-fetch-cors","mainEntityOfPage":{"@type":"WebPage","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/cross-domain-post-request-javascript-fetch-cors"},"inLanguage":"ru","dateCreated":"2026-02-24T10:35:27.960Z","datePublished":"2026-02-24T10:35:27.960Z","dateModified":"2026-02-24T18:28:00.024Z","author":[{"@type":"Person","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/@mdn-contributors","name":"MDN contributors","givenName":"MDN","familyName":"contributors","url":"https://xn--b1afbosiaouc3h.xn--p1ai/@mdn-contributors","jobTitle":"Технические писатели","description":"Коллектив авторов и технических специалистов, участвующих в создании документации по веб-технологиям"},{"@type":"Organization","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/@developer-mozilla-org","name":"MDN Web Docs","description":"Бесплатная многоязычная онлайн документация по веб-технологиям для разработчиков","url":"https://xn--b1afbosiaouc3h.xn--p1ai/@developer-mozilla-org","logo":{"@type":"ImageObject","url":"https://xn--b1afbosiaouc3h.xn--p1ai/api/v1/source/developer-mozilla-org/logo.png","width":"72","height":"72"}},{"@type":"Person","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/@iliakan","name":"Илья Кантор","givenName":"Илья","familyName":"Кантор","url":"https://xn--b1afbosiaouc3h.xn--p1ai/@iliakan","image":{"@type":"ImageObject","url":"https://xn--b1afbosiaouc3h.xn--p1ai/api/v1/person/iliakan/avatar.png","width":"72","height":"72"},"jobTitle":"Автор, тренер, JS-разработчик","description":"Создатель Modern JavaScript Tutorial, автор и тренер, регулярно обновляет материал с 2007 года"},{"@type":"Person","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/@igrishaev","name":"Иван Гришаев","givenName":"Иван","familyName":"Гришаев","url":"https://xn--b1afbosiaouc3h.xn--p1ai/@igrishaev","jobTitle":"Backend-инженер","description":"Удалённый IT-инженер, backend-разработчик в европейской fintech-компании, специалист по Clojure, SQL, Postgres, функциональному программированию (Lisp), автор двух книг по Clojure, спикер сообщества, отец троих детей, интересуется книгами, переговорами и образованием"}],"publisher":{"@type":"Organization","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/about","name":"НейроОтветы","url":"https://xn--b1afbosiaouc3h.xn--p1ai/about","logo":{"@type":"ImageObject","url":"https://xn--b1afbosiaouc3h.xn--p1ai/logo.png","width":"512","height":"512"}},"headline":"Кросс-доменный POST-запрос в JS: Fetch без обновления","description":"Как отправить кросс-доменный POST-запрос с помощью JavaScript (Fetch или XHR) без обновления страницы. Решение ошибок CORS, blocked by cors policy, разбор ответа response.json() и настройки Access-Control-Allow-Origin.","keywords":["cors","fetch post","blocked by cors policy","кросс-доменный запрос","javascript fetch","xhr post","cors preflight","access-control-allow-origin","fetch cors","ошибка cors","ajax post"],"image":["https://xn--b1afbosiaouc3h.xn--p1ai/api/v1/question/15218/preview/1x1.png","https://xn--b1afbosiaouc3h.xn--p1ai/api/v1/question/15218/preview/4x3.png","https://xn--b1afbosiaouc3h.xn--p1ai/api/v1/question/15218/preview/16x9.png"],"articleBody":""}},{"@type":"ListItem","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/align-multiple-charts-axes-highcharts","name":"Как выровнять оси нескольких графиков в Highcharts","position":3,"item":{"@type":"Article","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/align-multiple-charts-axes-highcharts","mainEntityOfPage":{"@type":"WebPage","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/align-multiple-charts-axes-highcharts"},"inLanguage":"ru","dateCreated":"2026-01-16T06:34:36.384Z","datePublished":"2026-01-16T06:34:36.384Z","dateModified":"2026-01-16T06:34:36.384Z","author":[{"@type":"Organization","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/about","name":"НейроОтветы","url":"https://xn--b1afbosiaouc3h.xn--p1ai/about","logo":{"@type":"ImageObject","url":"https://xn--b1afbosiaouc3h.xn--p1ai/logo.png","width":"512","height":"512"}}],"publisher":{"@type":"Organization","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/about","name":"НейроОтветы","url":"https://xn--b1afbosiaouc3h.xn--p1ai/about","logo":{"@type":"ImageObject","url":"https://xn--b1afbosiaouc3h.xn--p1ai/logo.png","width":"512","height":"512"}},"headline":"Как выровнять оси нескольких графиков в Highcharts","description":"Синхронизация осей и выравнивание нескольких графиков в Highcharts: решение проблемы непредсказуемого рендера заголовков. Пошаговая инструкция с кодом, marginLeft, plotLeft и обработкой особых случаев как opposite yAxis.","keywords":["highcharts","выравнивание графиков","синхронизация осей","highcharts оси","выровнять графики highcharts","highcharts marginleft","plotleft highcharts","highcharts chart","график highcharts","highcharts js"],"image":[],"articleBody":""}},{"@type":"ListItem","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/vue-js-custom-rendering-console-vue-termui","name":"Настройка рендеринга Vue.js в консоль с vue-termui","position":4,"item":{"@type":"Article","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/vue-js-custom-rendering-console-vue-termui","mainEntityOfPage":{"@type":"WebPage","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/vue-js-custom-rendering-console-vue-termui"},"inLanguage":"ru","dateCreated":"2025-12-24T09:26:52.001Z","datePublished":"2025-12-24T09:26:52.001Z","dateModified":"2025-12-24T09:26:52.001Z","author":[{"@type":"Organization","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/about","name":"НейроОтветы","url":"https://xn--b1afbosiaouc3h.xn--p1ai/about","logo":{"@type":"ImageObject","url":"https://xn--b1afbosiaouc3h.xn--p1ai/logo.png","width":"512","height":"512"}}],"publisher":{"@type":"Organization","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/about","name":"НейроОтветы","url":"https://xn--b1afbosiaouc3h.xn--p1ai/about","logo":{"@type":"ImageObject","url":"https://xn--b1afbosiaouc3h.xn--p1ai/logo.png","width":"512","height":"512"}},"headline":"Настройка рендеринга Vue.js в консоль с vue-termui","description":"Как использовать createRenderer для нестандартного рендеринга Vue.js в терминале. Примеры с vue-termui, обработка stdin/stdout, события и типичные ошибки. Готовые решения для консольного UI.","keywords":["vue termui","vue custom renderer","vue консоль","createRenderer","vue terminal","vue js рендеринг","vue-termui","vue 3 renderer","консольный рендерер vue"],"image":[],"articleBody":""}},{"@type":"ListItem","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/slider-peek-effect-swiper-slick-owl-responsive","name":"Слайдер с эффектом peek: Swiper, Slick, Owl адаптивно","position":5,"item":{"@type":"Article","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/slider-peek-effect-swiper-slick-owl-responsive","mainEntityOfPage":{"@type":"WebPage","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/slider-peek-effect-swiper-slick-owl-responsive"},"inLanguage":"ru","dateCreated":"2026-01-16T06:45:56.743Z","datePublished":"2026-01-16T06:45:56.743Z","dateModified":"2026-01-16T06:45:56.743Z","author":[{"@type":"Organization","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/about","name":"НейроОтветы","url":"https://xn--b1afbosiaouc3h.xn--p1ai/about","logo":{"@type":"ImageObject","url":"https://xn--b1afbosiaouc3h.xn--p1ai/logo.png","width":"512","height":"512"}}],"publisher":{"@type":"Organization","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/about","name":"НейроОтветы","url":"https://xn--b1afbosiaouc3h.xn--p1ai/about","logo":{"@type":"ImageObject","url":"https://xn--b1afbosiaouc3h.xn--p1ai/logo.png","width":"512","height":"512"}},"headline":"Слайдер с эффектом peek: Swiper, Slick, Owl адаптивно","description":"Реализуйте адаптивный слайдер с эффектом peek на Swiper, Slick, Owl Carousel. Настройки slidesPerView, centeredSlides, spaceBetween, breakpoints для мобильных (3 слайда) и десктопов. Формулы расчета ширин и примеры кода.","keywords":["слайдер peek","swiper peek","slick slider peek","owl stagePadding","адаптивный слайдер","slidesPerView","centeredSlides","centerPadding","swiper breakpoints","слайдер html css","карусель с peek"],"image":[],"articleBody":""}},{"@type":"ListItem","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/how-to-change-styles-vk-iframe-elements","name":"Как изменить стили элементов iframe с видео ВКонтакте","position":6,"item":{"@type":"Article","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/how-to-change-styles-vk-iframe-elements","mainEntityOfPage":{"@type":"WebPage","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/how-to-change-styles-vk-iframe-elements"},"inLanguage":"ru","dateCreated":"2026-03-08T06:48:13.494Z","datePublished":"2026-03-08T06:48:13.494Z","dateModified":"2026-03-08T07:19:41.273Z","author":[{"@type":"Person","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/@inkvizitor","name":"Инквизитор","givenName":"Инквизитор","url":"https://xn--b1afbosiaouc3h.xn--p1ai/@inkvizitor","jobTitle":"Фронтенд-разработчик","description":"Профессиональный разработчик, отвечающий на вопросы на Stack Overflow"},{"@type":"Person","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/@duddeniska","name":"duddeniska","givenName":"duddeniska","url":"https://xn--b1afbosiaouc3h.xn--p1ai/@duddeniska","jobTitle":"Разработчик","description":"Профессиональный разработчик, участвующий в обсуждениях на Stack Overflow"},{"@type":"Organization","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/@ru-stackoverflow-com","name":"Stack Overflow","description":"Русскоязычная версия Stack Overflow - платформа вопросов и ответов для программистов","url":"https://xn--b1afbosiaouc3h.xn--p1ai/@ru-stackoverflow-com","logo":{"@type":"ImageObject","url":"https://xn--b1afbosiaouc3h.xn--p1ai/api/v1/source/ru-stackoverflow-com/logo.png","width":"72","height":"72"}},{"@type":"Organization","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/@toster-ru","name":"Toster","description":"Вопросы и ответы для разработчиков и IT-специалистов","url":"https://xn--b1afbosiaouc3h.xn--p1ai/@toster-ru"},{"@type":"Organization","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/@qna-habr-com","name":"Habr Q&A","description":"Российская платформа вопросов и ответов для IT-специалистов и энтузиастов технологий","url":"https://xn--b1afbosiaouc3h.xn--p1ai/@qna-habr-com","logo":{"@type":"ImageObject","url":"https://xn--b1afbosiaouc3h.xn--p1ai/api/v1/source/qna-habr-com/logo.png","width":"72","height":"72"}},{"@type":"Organization","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/@searchengines-guru","name":"Searchengines.guru","description":"Крупнейший русскоязычный форум и новостной сайт, посвященный поисковой оптимизации, продвижению сайтов, интернет-маркетингу, работе с контекстной рекламой, монетизации трафика, сайтостроению","url":"https://xn--b1afbosiaouc3h.xn--p1ai/@searchengines-guru","logo":{"@type":"ImageObject","url":"https://xn--b1afbosiaouc3h.xn--p1ai/api/v1/source/searchengines-guru/icon.png","width":"72","height":"72"}},{"@type":"Organization","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/@vk-com","name":"VK","description":"Крупнейшая европейская социальная сеть с более чем 100 миллионами активных пользователей. Цель - поддерживать связь между старыми друзьями, одноклассниками, соседями и коллегами.","url":"https://xn--b1afbosiaouc3h.xn--p1ai/@vk-com","logo":{"@type":"ImageObject","url":"https://xn--b1afbosiaouc3h.xn--p1ai/api/v1/source/vk-com/logo.png","width":"72","height":"72"}}],"publisher":{"@type":"Organization","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/about","name":"НейроОтветы","url":"https://xn--b1afbosiaouc3h.xn--p1ai/about","logo":{"@type":"ImageObject","url":"https://xn--b1afbosiaouc3h.xn--p1ai/logo.png","width":"512","height":"512"}},"headline":"Как изменить стили элементов iframe с видео ВКонтакте","description":"Объяснение, почему невозможно изменить стили элементов управления внутри iframe с видео ВКонтакте из-за ограничений безопасности браузеров и альтернативные решения.","keywords":["iframe стили","iframe стиль","iframe вконтакте","вконтакте iframe","iframe css","стилизация iframe","доступ к элементам iframe","изменение стилей во внешнем фрейме","встраивание видео вконтакте","кастомные стили iframe","same-origin policy","ограничения iframe","css iframe","javascript iframe","видео вконтакте"],"image":[],"articleBody":""}},{"@type":"ListItem","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/browser-javascript-pdf-decryption-password-protected","name":"Расшифровка PDF в браузере с помощью JavaScript: Технические ограничения","position":7,"item":{"@type":"Article","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/browser-javascript-pdf-decryption-password-protected","mainEntityOfPage":{"@type":"WebPage","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/browser-javascript-pdf-decryption-password-protected"},"inLanguage":"ru","dateCreated":"2026-04-06T19:22:16.823Z","datePublished":"2026-04-06T19:22:16.823Z","dateModified":"2026-04-06T19:22:16.823Z","author":[{"@type":"Person","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/@pdf-lib-team","name":"@pdf-lib-team","url":"https://xn--b1afbosiaouc3h.xn--p1ai/@pdf-lib-team","jobTitle":"Разработка ПО","description":"Команда разработки PDF-LIB"},{"@type":"Organization","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/@pdf-lib-js-org","name":"PDF-LIB","description":"Библиотека для создания и изменения PDF-документов в любой JavaScript среде","url":"https://xn--b1afbosiaouc3h.xn--p1ai/@pdf-lib-js-org"},{"@type":"Person","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/@pdf-lib-contributors","name":"@pdf-lib-contributors","url":"https://xn--b1afbosiaouc3h.xn--p1ai/@pdf-lib-contributors","jobTitle":"Разработчики","description":"Контрибьюторы проекта pdf-lib на GitHub"},{"@type":"Organization","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/@github-com","name":"GitHub","description":"Крупнейшая платформа для совместной разработки программного обеспечения с открытым исходным кодом, где миллионы разработчиков, бизнеса и крупнейшее сообщество с открытым исходным кодом создают программное обеспечение, продвигающее человечество.","url":"https://xn--b1afbosiaouc3h.xn--p1ai/@github-com","logo":{"@type":"ImageObject","url":"https://xn--b1afbosiaouc3h.xn--p1ai/api/v1/source/github-com/logo.png","width":"72","height":"72"}},{"@type":"Person","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/@pdf-js-team","name":"@pdf-js-team","url":"https://xn--b1afbosiaouc3h.xn--p1ai/@pdf-js-team","jobTitle":"Разработка ПО","description":"Команда разработки Mozilla PDF.js"},{"@type":"Organization","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/@mozilla-github-io","name":"PDF.js","description":"Платформа на основе веб-стандартов для разбора и рендеринга PDF","url":"https://xn--b1afbosiaouc3h.xn--p1ai/@mozilla-github-io"},{"@type":"Person","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/@nguyen-cuc","name":"Nguyen Cuc","givenName":"Nguyen","familyName":"Cuc","url":"https://xn--b1afbosiaouc3h.xn--p1ai/@nguyen-cuc","jobTitle":"Разработчик Ruby on Rails","description":"Пользователь Stack Overflow, интересуется разработкой веб-приложений на Ruby on Rails"},{"@type":"Organization","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/@stackoverflow-com","name":"Stack Overflow","description":"Крупнейшая в мире платформа вопросов и ответов для профессиональных и энтузиаст-программистов","url":"https://xn--b1afbosiaouc3h.xn--p1ai/@stackoverflow-com","logo":{"@type":"ImageObject","url":"https://xn--b1afbosiaouc3h.xn--p1ai/api/v1/source/stackoverflow-com/logo.png","width":"72","height":"72"}}],"publisher":{"@type":"Organization","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/about","name":"НейроОтветы","url":"https://xn--b1afbosiaouc3h.xn--p1ai/about","logo":{"@type":"ImageObject","url":"https://xn--b1afbosiaouc3h.xn--p1ai/logo.png","width":"512","height":"512"}},"headline":"Расшифровка PDF в браузере с помощью JavaScript: Технические ограничения","description":"Почему невозможно расшифровать PDF-файлы, защищенные паролем, в браузере с помощью JavaScript. Анализ ограничений библиотек pdf-lib и PDF.js.","keywords":["pdf в браузере","пароль pdf","javascript pdf","разблокировать пдф онлайн","снять пароль с pdf","браузер pdf скачать","pdf защищен паролем"],"image":["https://xn--b1afbosiaouc3h.xn--p1ai/api/v1/question/16936/preview/1x1.png","https://xn--b1afbosiaouc3h.xn--p1ai/api/v1/question/16936/preview/4x3.png","https://xn--b1afbosiaouc3h.xn--p1ai/api/v1/question/16936/preview/16x9.png"],"articleBody":""}},{"@type":"ListItem","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/how-to-capitalize-first-letter-javascript","name":"Как сделать первую букву строки заглавной в JavaScript","position":8,"item":{"@type":"Article","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/how-to-capitalize-first-letter-javascript","mainEntityOfPage":{"@type":"WebPage","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/how-to-capitalize-first-letter-javascript"},"inLanguage":"ru","dateCreated":"2025-10-20T16:05:01.914Z","datePublished":"2025-10-20T16:05:01.914Z","dateModified":"2026-01-15T10:41:21.407Z","author":[{"@type":"Organization","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/about","name":"НейроОтветы","url":"https://xn--b1afbosiaouc3h.xn--p1ai/about","logo":{"@type":"ImageObject","url":"https://xn--b1afbosiaouc3h.xn--p1ai/logo.png","width":"512","height":"512"}}],"publisher":{"@type":"Organization","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/about","name":"НейроОтветы","url":"https://xn--b1afbosiaouc3h.xn--p1ai/about","logo":{"@type":"ImageObject","url":"https://xn--b1afbosiaouc3h.xn--p1ai/logo.png","width":"512","height":"512"}},"headline":"Как сделать первую букву строки заглавной в JavaScript","description":"Простой способ в JS сделать первую букву строки заглавной, не меняя регистр остальных символов. Примеры кода с проверкой на букву, Unicode-поддержка для кириллицы и путей вроде \"/index.html\". Эффективные методы charAt, slice и regex.","keywords":["сделать первую букву заглавной","javascript строка","первая буква заглавная","js первая буква заглавная","заглавная буква javascript","capitalize first letter js","первый символ строки javascript","работа со строками javascript"],"image":[],"articleBody":""}},{"@type":"ListItem","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/yandex-maps-api-3-loadingobjectmanager-analog","name":"Аналог LoadingObjectManager в Яндекс Карты API 3.0","position":9,"item":{"@type":"Article","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/yandex-maps-api-3-loadingobjectmanager-analog","mainEntityOfPage":{"@type":"WebPage","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/yandex-maps-api-3-loadingobjectmanager-analog"},"inLanguage":"ru","dateCreated":"2026-01-01T14:08:31.732Z","datePublished":"2026-01-01T14:08:31.732Z","dateModified":"2026-01-14T09:05:36.626Z","author":[{"@type":"Organization","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/about","name":"НейроОтветы","url":"https://xn--b1afbosiaouc3h.xn--p1ai/about","logo":{"@type":"ImageObject","url":"https://xn--b1afbosiaouc3h.xn--p1ai/logo.png","width":"512","height":"512"}}],"publisher":{"@type":"Organization","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/about","name":"НейроОтветы","url":"https://xn--b1afbosiaouc3h.xn--p1ai/about","logo":{"@type":"ImageObject","url":"https://xn--b1afbosiaouc3h.xn--p1ai/logo.png","width":"512","height":"512"}},"headline":"Аналог LoadingObjectManager в Яндекс Карты API 3.0","description":"В Яндекс Карты API 3.0 нет прямого аналога ymaps.LoadingObjectManager из v2.1. Узнайте, как самостоятельно реализовать ленивую загрузку тысяч геоточек: отслеживание bbox, fetch GeoJSON, кластеризация с YMapClusterer. Примеры кода и советы.","keywords":["яндекс карты api 3.0","loadingobjectmanager","ленивая загрузка","ymaps3","yandex maps api v3","кластеризация точек","geojson","yandex maps clusterer","ymaps3 clusterbygrid"],"image":[],"articleBody":""}},{"@type":"ListItem","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/liquid-glass-effect-css-implementation","name":"Эффект жидкого стекла: реализация CSS и JS кодом","position":10,"item":{"@type":"Article","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/liquid-glass-effect-css-implementation","mainEntityOfPage":{"@type":"WebPage","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/liquid-glass-effect-css-implementation"},"inLanguage":"ru","dateCreated":"2025-12-18T11:42:10.029Z","datePublished":"2025-12-18T11:42:10.029Z","dateModified":"2026-01-14T19:07:21.664Z","author":[{"@type":"Organization","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/about","name":"НейроОтветы","url":"https://xn--b1afbosiaouc3h.xn--p1ai/about","logo":{"@type":"ImageObject","url":"https://xn--b1afbosiaouc3h.xn--p1ai/logo.png","width":"512","height":"512"}}],"publisher":{"@type":"Organization","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/about","name":"НейроОтветы","url":"https://xn--b1afbosiaouc3h.xn--p1ai/about","logo":{"@type":"ImageObject","url":"https://xn--b1afbosiaouc3h.xn--p1ai/logo.png","width":"512","height":"512"}},"headline":"Эффект жидкого стекла: реализация CSS и JS кодом","description":"Как создать эффект жидкого стекла (liquid glass) в графическом интерфейсе с помощью CSS backdrop-filter, SVG-фильтров и JavaScript. Базовый код, продвинутые техники, совместимость браузеров и оптимизация производительности для UI.","keywords":["эффект жидкого стекла","стеклянный эффект","как сделать эффект жидкого стекла","backdrop-filter","liquid glass css","glassmorphism","svg фильтры","css стеклянный эффект"],"image":[],"articleBody":""}}]}}]}