\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/woocommerce-switch-product-cards-by-color-without-variations","name":"Переключение карточек товаров по цвету в WooCommerce без вариаций","position":1,"item":{"@type":"Article","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/woocommerce-switch-product-cards-by-color-without-variations","mainEntityOfPage":{"@type":"WebPage","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/woocommerce-switch-product-cards-by-color-without-variations"},"inLanguage":"ru","dateCreated":"2026-01-17T12:18:49.115Z","datePublished":"2026-01-17T12:18:49.115Z","dateModified":"2026-01-17T12:18:49.115Z","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":"Переключение карточек товаров по цвету в WooCommerce без вариаций","description":"Как реализовать свитчинг карточек товаров при выборе цвета обуви в WooCommerce без вариативных продуктов. Meta-поля, хуки, AJAX и JS для динамического каталога как на маркетплейсах. SEO-дружественный подход с примерами кода.","keywords":["woocommerce","переключение карточек товаров","цвет обуви","без вариативных продуктов","ajax woocommerce","хуки woocommerce","woocommerce товары","цвет товара","вариация woocommerce","woocommerce карточки товара","woocommerce variation"],"image":[],"articleBody":""}},{"@type":"ListItem","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/how-to-prevent-horizontal-scroll-mobile-menu","name":"Как запретить горизонтальный скроллинг в мобильном меню","position":2,"item":{"@type":"Article","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/how-to-prevent-horizontal-scroll-mobile-menu","mainEntityOfPage":{"@type":"WebPage","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/how-to-prevent-horizontal-scroll-mobile-menu"},"inLanguage":"ru","dateCreated":"2026-01-24T07:39:07.620Z","datePublished":"2026-01-24T07:39:07.620Z","dateModified":"2026-01-24T07:39:07.620Z","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":"Как запретить горизонтальный скроллинг в мобильном меню","description":"Решения для запрета горизонтальной прокрутки при открытии мобильного меню. CSS overflow-x hidden, body fixed position и JavaScript методы.","keywords":["мобильное меню","горизонтальная прокрутка","overflow hidden","CSS overflow-x","body fixed","burger menu","мобильная версия","CSS решения"],"image":[],"articleBody":""}},{"@type":"ListItem","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/javascript-settimeout-delay-between-savefile-runbatch","name":"setTimeout JavaScript: задержка между SaveData и RunFile","position":3,"item":{"@type":"Article","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/javascript-settimeout-delay-between-savefile-runbatch","mainEntityOfPage":{"@type":"WebPage","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/javascript-settimeout-delay-between-savefile-runbatch"},"inLanguage":"ru","dateCreated":"2026-02-27T15:24:59.934Z","datePublished":"2026-02-27T15:24:59.934Z","dateModified":"2026-02-27T15:24:59.934Z","author":[{"@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":"Илья Кантор — автор, тренер и JavaScript-разработчик, основатель проекта Modern JavaScript Tutorial."},{"@type":"Organization","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/@learn-javascript-ru","name":"learn.javascript.ru","description":"Бесплатный интерактивный учебник по современному JavaScript с примерами и задачами, охватывающий основы, тонкости и фишки языка и DOM","url":"https://xn--b1afbosiaouc3h.xn--p1ai/@learn-javascript-ru","logo":{"@type":"ImageObject","url":"https://xn--b1afbosiaouc3h.xn--p1ai/api/v1/source/learn-javascript-ru/logo.png","width":"72","height":"72"}},{"@type":"Organization","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/@developer-mozilla-org","name":"MDN Web Docs","description":"Free resource for web developers providing detailed information about web technologies, APIs, and best practices","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/@estet","name":"@estet","url":"https://xn--b1afbosiaouc3h.xn--p1ai/@estet","jobTitle":"Разработчик","description":"Активный участник Stack Overflow на русском с экспертизой в C#, JavaScript, .NET, Delphi; 545 репутации, 9 ответов"},{"@type":"Person","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/@sega057","name":"Саша Черных","givenName":"Саша","familyName":"Черных","url":"https://xn--b1afbosiaouc3h.xn--p1ai/@sega057","jobTitle":"Разработчик","description":"Участник Stack Overflow на русском с интересом к JavaScript; 21 репутация, 1 ответ"},{"@type":"Person","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/@autocrab","name":"@autocrab","url":"https://xn--b1afbosiaouc3h.xn--p1ai/@autocrab","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":"Person","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/@alexey-golubev","name":"Алексей Голубев","givenName":"Алексей","familyName":"Голубев","url":"https://xn--b1afbosiaouc3h.xn--p1ai/@alexey-golubev","jobTitle":"Разработчик","description":"Автор примеров кода на CodeNet.ru"},{"@type":"Organization","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/@www-codenet-ru","name":"CodeNet.ru","description":"Сайт с статьями, исходниками и примерами кода для веб-разработки и программирования","url":"https://xn--b1afbosiaouc3h.xn--p1ai/@www-codenet-ru"},{"@type":"Person","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/@ionden","name":"Денис Инешин","givenName":"Денис","familyName":"Инешин","url":"https://xn--b1afbosiaouc3h.xn--p1ai/@ionden","image":{"@type":"ImageObject","url":"https://xn--b1afbosiaouc3h.xn--p1ai/api/v1/person/ionden/avatar.png","width":"72","height":"72"},"jobTitle":"JavaScript разработчик","description":"JavaScript-разработчик в Booking.com, автор open-source проектов на ionden.com, значительный вклад в теги JavaScript, HTML, CSS (3074 ответа, 33% решений)"},{"@type":"Person","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/@k12th","name":"Константин Китманов","givenName":"Константин","familyName":"Китманов","url":"https://xn--b1afbosiaouc3h.xn--p1ai/@k12th","image":{"@type":"ImageObject","url":"https://xn--b1afbosiaouc3h.xn--p1ai/api/v1/person/k12th/avatar.png","width":"72","height":"72"},"jobTitle":"Разработчик","description":"Активный участник Хабр Q&A с вкладом в JavaScript, Node.js, HTML, разработку игр, npm, CSS (1745 ответов, 34% решений)"},{"@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":"Person","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/@streletz","name":"@streletz","url":"https://xn--b1afbosiaouc3h.xn--p1ai/@streletz","jobTitle":"Разработчик","description":"Участник Stack Overflow на русском"}],"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":"setTimeout JavaScript: задержка между SaveData и RunFile","description":"Как реализовать задержку setTimeout javascript между вызовами функций SaveData() для сохранения файла javascript через ActiveXObject и RunFile() для wscript shell run batch-файла при клике на кнопку. Полный пример кода, альтернативы и отладка для js settimeout.","keywords":["settimeout","settimeout javascript","js settimeout","файл javascript","javascript сохранить файл","wscript shell","wscript shell run","activexobject","settimeout задержка"],"image":[],"articleBody":""}},{"@type":"ListItem","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/servicepipe-js-localhost-scan-kaspersky-hang","name":"Servicepipe JS сканирует localhost и зависает с Kaspersky","position":4,"item":{"@type":"Article","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/servicepipe-js-localhost-scan-kaspersky-hang","mainEntityOfPage":{"@type":"WebPage","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/servicepipe-js-localhost-scan-kaspersky-hang"},"inLanguage":"ru","dateCreated":"2026-01-04T06:28:01.095Z","datePublished":"2026-01-04T06:28:01.095Z","dateModified":"2026-01-04T06:35:14.269Z","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":"Servicepipe JS сканирует localhost и зависает с Kaspersky","description":"Почему скрипт Servicepipe.ru сканирует localhost (RDP, VNC), вызывает зависание сайта и ошибки с Kaspersky Endpoint Security? Легитимная DDoS защита или угроза? Анализ обфусцированного JS, диагностика конфликта, меры блокировки CSP и uBlock.","keywords":["kaspersky endpoint security","servicepipe","сканирование localhost","защита от ddos","обфусцированный javascript","локальные порты","kaspersky блокировка","ddos cybert","анализ js","csp блокировка","ublock origin","threatmetrix"],"image":[],"articleBody":""}},{"@type":"ListItem","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/how-to-display-order-number-tilda-thank-you-page","name":"Tilda: номер заказа на странице Спасибо после оплаты","position":5,"item":{"@type":"Article","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/how-to-display-order-number-tilda-thank-you-page","mainEntityOfPage":{"@type":"WebPage","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/how-to-display-order-number-tilda-thank-you-page"},"inLanguage":"ru","dateCreated":"2026-01-02T15:34:47.486Z","datePublished":"2026-01-02T15:34:47.486Z","dateModified":"2026-01-02T15:34:47.486Z","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: номер заказа на странице Спасибо после оплаты","description":"Как вывести номер и состав заказа на странице «Спасибо» в Tilda после оплаты из корзины. Инструкции по tilda javascript, webhook, tilda api и localStorage. Примеры кода, чек-лист и отладка для tilda оплата и tilda корзина.","keywords":["tilda оплата","tilda api","tilda заказы","tilda корзина","tilda webhook","tilda javascript","страница спасибо tilda","tilda переменные"],"image":[],"articleBody":""}},{"@type":"ListItem","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/jquery-ajax-форма-отправка","name":"Отправка формы через jQuery Ajax без перезагрузки страницы","position":6,"item":{"@type":"Article","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/jquery-ajax-форма-отправка","mainEntityOfPage":{"@type":"WebPage","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/jquery-ajax-форма-отправка"},"inLanguage":"ru","dateCreated":"2025-12-09T18:19:40.813Z","datePublished":"2025-12-09T18:19:40.813Z","dateModified":"2025-12-09T18:19:40.813Z","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":"Отправка формы через jQuery Ajax без перезагрузки страницы","description":"Используйте jQuery для перехвата отправки формы, сериализуйте данные и отправьте их через $.ajax на form.php. Предотвратите перенаправление и обработайте ответ.","keywords":["jquery ajax отправка формы","отправка формы без перезагрузки","сериализация данных jQuery","пример jQuery ajax","form.php ajax","обработка ответа ajax","предотвратить перезагрузку","jquery ajax post","ajax обработка формы","jquery ajax без перенаправления"],"image":[],"articleBody":""}},{"@type":"ListItem","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/problems-loading-site-old-ios-version","name":"Проблемы загрузки сайта на старых iOS: диагностика и решения","position":7,"item":{"@type":"Article","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/problems-loading-site-old-ios-version","mainEntityOfPage":{"@type":"WebPage","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/problems-loading-site-old-ios-version"},"inLanguage":"ru","dateCreated":"2026-04-06T13:19:53.054Z","datePublished":"2026-04-06T13:19:53.054Z","dateModified":"2026-04-08T08:01:47.880Z","author":[{"@type":"Person","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/@apple-dev-team","name":"Apple Developer Team","givenName":"Apple","familyName":"Developer Team","url":"https://xn--b1afbosiaouc3h.xn--p1ai/@apple-dev-team","jobTitle":"Команда разработчиков документации","description":"Команда инженеров и технических писателей Apple, ответственных за создание и поддержание документации для разработчиков экосистемы Apple."},{"@type":"Person","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/@alexis","name":"Alexis Deveria","givenName":"Alexis","familyName":"Deveria","url":"https://xn--b1afbosiaouc3h.xn--p1ai/@alexis","jobTitle":"Веб-разработчик","description":"Веб-разработчик и создатель сервиса Can I use, специализирующийся на тестировании совместимости веб-технологий и создании инструментов для веб-разработчиков."},{"@type":"Person","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/@mdn-team","name":"MDN contributors","givenName":"MDN","familyName":"contributors","url":"https://xn--b1afbosiaouc3h.xn--p1ai/@mdn-team","jobTitle":"Технические писатели","description":"Сообщество разработчиков и технических писателей, совместно создающих и поддерживающих документацию веб-технологий на платформе MDN Web Docs."},{"@type":"Person","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/@react-core","name":"React Team","givenName":"React","familyName":"Team","url":"https://xn--b1afbosiaouc3h.xn--p1ai/@react-core","jobTitle":"Разработчики библиотек","description":"Команда инженеров Facebook (Meta), ответственных за разработку и поддержку React - JavaScript-библиотеки для создания пользовательских интерфейсов."}],"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":"Проблемы загрузки сайта на старых iOS: диагностика и решения","description":"Причины сбоев загрузки Django+React сайта на iOS ниже версии 26. Совместимость mobile safari 537.36, JavaScript/CSS проблемы и решения для старых версий iOS.","keywords":["mobile safari 537.36","старую версию ios","совместимость ios","ios 26 safari","react ios","safari проблемы","старые версии ios iphone","django react","веб-совместимость","ios safari"],"image":[],"articleBody":""}},{"@type":"ListItem","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/merge-two-arrays-objects-javascript-by-id","name":"Объединение двух массивов объектов в JavaScript по id","position":8,"item":{"@type":"Article","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/merge-two-arrays-objects-javascript-by-id","mainEntityOfPage":{"@type":"WebPage","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/merge-two-arrays-objects-javascript-by-id"},"inLanguage":"ru","dateCreated":"2026-02-10T09:26:15.296Z","datePublished":"2026-02-10T09:26:15.296Z","dateModified":"2026-02-11T16:06:05.332Z","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 по id","description":"Эффективные методы объединения двух массивов объектов в JavaScript на основе общего свойства id. Добавление комментариев к цветам с использованием reduce(), Map() и других подходов.","keywords":["javascript массивы","javascript объединить","javascript merge arrays","javascript массив объектов","javascript добавить в массив","javascript объединить объекты","javascript reduce","javascript map","javascript comments","javascript colors","javascript id property"],"image":[],"articleBody":""}},{"@type":"ListItem","@id":"https://xn--b1afbosiaouc3h.xn--p1ai/c/web/q/how-to-change-styles-vk-iframe-elements","name":"Как изменить стили элементов iframe с видео ВКонтакте","position":9,"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/slider-peek-effect-swiper-slick-owl-responsive","name":"Слайдер с эффектом peek: Swiper, Slick, Owl адаптивно","position":10,"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":""}}]}}]}