Баг у youtube embed
Я бы даже сказал, не баг, а недоработка, а ещё, вероятно, специально так сделали.
Суть в том, что в коде стоит загрузка js-кода не по http:// схеме, а по //
Код:
<div id="player" class="full-frame"></div> <script id="js-1235545350" class="www-embed-player" src="//s.ytimg.com/yts/jsbin/www-embed-player-vflR7Oyxi.js" data-loaded="true"></script>
<script id="js-705491848" class="html5player" src="//s.ytimg.com/yts/jsbin/html5player-vflGNjMhJ.js" data-loaded="true"></script>
<script>yt.setConfig(
Всё это прекрасно работает в iframe, размещённых на https*:// схеме, а вот в расширениях для Хрома с их схемой chrome-extension:// это нифига не грузится.
Возникает Uncaught ReferenceError: yt is not defined , ибо код, где yt создаётся, находится в файле html5player-vflGNjMhJ.js
Соответственно, плеер не запускается и видео не видно.
Какой выход?
1. Запускать расширение как content-скрипт на каком-нибудь http домене, можно даже локальном;
2. Создать content-скрипт, который будет внедряться в youtube embed, берём любые ссылки на скрипты без схемы и запоминаем их для этого домена (и/или для подобных страниц) в настройках, и соответственно, в будущем грузим их в начале страницы. То есть, content-скрипт просто запустит перегрузку страницы после сохранения скриптов, если js-файлов из расширения не поступило (первый запуск) и на странице есть скрипты без схемы.
Для простоты хранения данных (и простоты обмена и ненаписания лишнего кода в ядре расширения) можно эти скрипты хранить прямо внутри iframe в localStorage.
Update: Можно использовать вот эту библиотеку
Суть в том, что в коде стоит загрузка js-кода не по http:// схеме, а по //
Код:
<div id="player" class="full-frame"></div> <script id="js-1235545350" class="www-embed-player" src="//s.ytimg.com/yts/jsbin/www-embed-player-vflR7Oyxi.js" data-loaded="true"></script>
<script id="js-705491848" class="html5player" src="//s.ytimg.com/yts/jsbin/html5player-vflGNjMhJ.js" data-loaded="true"></script>
<script>yt.setConfig(
Всё это прекрасно работает в iframe, размещённых на https*:// схеме, а вот в расширениях для Хрома с их схемой chrome-extension:// это нифига не грузится.
Возникает Uncaught ReferenceError: yt is not defined , ибо код, где yt создаётся, находится в файле html5player-vflGNjMhJ.js
Соответственно, плеер не запускается и видео не видно.
Какой выход?
1. Запускать расширение как content-скрипт на каком-нибудь http домене, можно даже локальном;
2. Создать content-скрипт, который будет внедряться в youtube embed, берём любые ссылки на скрипты без схемы и запоминаем их для этого домена (и/или для подобных страниц) в настройках, и соответственно, в будущем грузим их в начале страницы. То есть, content-скрипт просто запустит перегрузку страницы после сохранения скриптов, если js-файлов из расширения не поступило (первый запуск) и на странице есть скрипты без схемы.
Для простоты хранения данных (и простоты обмена и ненаписания лишнего кода в ядре расширения) можно эти скрипты хранить прямо внутри iframe в localStorage.
Update: Можно использовать вот эту библиотеку