29.07.10 22:51
 Несколько дней назад на хабре мелькнула новость о новом способе встраивания youtube-видео в сторонние сайты. Но пока большинство сайтов\блогов не поддерживают его. Это, конечно, дело времени, но есть и другая проблема: даже после того, как администрация какого-либо сайта сделает поддержку у себя такого видео, вряд ли она изменит способ встраивания уже вставленного видео.
Поэтому, чтобы решить эти проблемы, я написал userscript, который на каждой только что загруженной странице ищет youtube-видео, встроенное старым способом, и меняет его на новый. Под катом описание некоторых особенностей и сам скрипт.
В старом встраиваемом плеере была такая особенность: при первом клике по нему начиналось воспроизведение видео, при втором в новой вкладке открывалась страница этого видео на youtube. В новой такого нет, поэтому скрипт добавляет ссылку на страницу youtube под видео. Если вам это не нужно, в начале скрипта замените строку «var insertLink = 1;» на «var insertLink = 0;».

В Опере в iframe появляется скроллбар. Я хотел убрать его, добавив scrolling=«no», но это привело к тому, что iframe вообще разползался на несколько страниц по вертикали, поэтому скроллбар будет, пока его не уберёт сам google.

Скрипт можно скачать здесь, а так же на userscripts.org.
Работает в Google Chrome, Mozilla Firefox, Opera.
-
Что-то я не совсем понял, что оно делает. Скрипт на лету что-то подменяет?
-
-
Да, ищет на страницы все < object >ы от ютуба и переколбашивает их в < iframe >ы.
-
-
А у меня все ифреймы переколбашены по-дефолту и сидят в резервации.
Там других вариантов нету?
-
-
Не понял
-
Можно я покритикую код?
Юзайте var почаще. Кроме того не совсем понятно, зачем там while():
1
2
3
4
5
6
7
|
var allElements = document.getElementsByTagName('object');
for (var n = 0; n < allElements.length; n++)
{
var currentElement = document.getElementsByTagName("object")[n];
// ...
|
-
-
Можно я покритикую код?
Конечно, критика приветствуется.
Насчёт var учту, скрипт поправил.
Насчёт примера: на каждом обороте цикла for если object действительно был youtube видео, то он удаляется, и allElements.length уменьшается на 1. И следующий обьект, который нужно исследовать будет с таким же индексом, как и только что удалённый. Впринципе, это возможно можно было бы исправить, добавив "n--" в конец цикла, но, по-моему, с while скрипт более предсказуем.
-
-
Перечитал свой комментарий к примеру - сам нихрена не понял, что хотел сказать :). Ща попробую обьяснить попонятнее
-
-
Обьясню на примере: допустим, на странице 4 а, из них 1-й, 2-й и 4-й youtube-видео.
Вращается цикл первый раз (n == 0): 1-й обьект найден (индекс 0), замёнён, удалён.
Вращается цикл второй раз (n == 1): Так как 1-й обьект обьёкт удалён, то 2-й будет иметь индекс 0, обработчик будет искать с индексом 1, наткнётся на 3-й обьёкт, который вообще не видео -> шаг пропущен
Вращается цикл третий раз (n == 2): 4-й обьект найден (индекс 2), замёнён, удалён.
В итоге одно видео пропущено.
-
-
Парсер лох. В первом предложении должно было быть:
"Обьясню на примере: допустим, на странице 4 <object>а"
-
-
Каюсь, тут ты прав. Мне почему-то казалось, что если взять результат getElementsByTagName() и присвоить его переменной, то сделается снепшот найденных элементов в виде статичного списка. Проверил простым скриптом:
1
2
3
|
var x = document.getElementsByTagName("a"); for (var i=0;i<x.length;i++) { x[i].parentNode.removeChild(x[i]); console.log(x.length); }
|
и всё стало ясно =)
-
Все предельно ясно :)
-
Здорово бы было видеть эту идею в виде плагинов для Хрома/Фокса и тд. или может кто знает об уже имеющихся? Про обезьяну знаю, но для нее есть готовое? Да я сегодня ленив
-
-
Для хрома просто щелкните по ссылке и установите как расширение, для FireFox нужен Greasemonkey
-
-
exelens, поправь ссылку плз =)
-
Блин... не вчитался в статью, я подумал что это скрип для встаивания непосредственно в страницу )
-
Оно и есть для обезьяны, про хром K-9 всё сказал
-
Попробовал, работает. Но пока не понимаю зачем.. и так и так получается флеш-видео, только разными способами вставленное.
-
-
В Firefox пока использовать особо смысла нет, тк стабильная версия не поддерживает WebM, а в нестабильной не пашет Greasemonkey, но вот в хроме и опере...
|
|
 |
Последние посты
|
 |
Последние комментарии
|
 |
Изменения
|
 |
Черновики (все)
|
 |
Избранное (всё)
|
 |
|