Новый дизайн: интеграция с расширениями

Avatar
  • обновлен

Привет, меня зовут Евгений, являюсь разработчиком расширения для Google Chrome "Яндекс.Музыка - управление плеером" с 30тыс+ пользователями, на текущей версии доступен externalAPI, любезно предоставленный разработчиками давным давно, на новом дизайне ничего подобного нет, хотел узнать перспективу появления такого АПИ? Я, конечно же, все равно смогу внедриться в вебпак-бандлы и достучаться до класса, управляющего плеером (есть такой в коде), но это неудобно и, главное, не стабильно. Быть может разработчики могут запилить externalAPI для новой витрины или же просто прокинуть в глобальное пространство этот класс по управлению плеером. 

Надеюсь на ответ. Спасибо.

Avatar
Егор Чистяков

Зашёл именно за этим. Спасибо, Евгений. Пользуюсь «пульт управления для вашей музыки», версия 0.0.471 — он? Иконка с жёлтым кругом и красными наушниками.

Avatar
Евгений Денисюк
Цитата от Егор Чистяков

Зашёл именно за этим. Спасибо, Евгений. Пользуюсь «пульт управления для вашей музыки», версия 0.0.471 — он? Иконка с жёлтым кругом и красными наушниками.

Это не моё, моё вот

Avatar
vladislav pozdeev

В связи с выключением скробблинга было бы полезно вернуть это API хотя бы так. Сторонние расширения которые скробблят музыку его использовали на старом дизайне (гитхаб подтверждение)

Avatar
Евгений Денисюк
Цитата от vladislav pozdeev

В связи с выключением скробблинга было бы полезно вернуть это API хотя бы так. Сторонние расширения которые скробблят музыку его использовали на старом дизайне (гитхаб подтверждение)

Увы, тут тишина и никакой реакции, придется в расширении опять костыли делать...

Avatar
vladislav pozdeev
Цитата от Евгений Денисюк

Увы, тут тишина и никакой реакции, придется в расширении опять костыли делать...

Прямо сейчас я костылю реализацию
https://pastebin.com/P2bnssdQ

Есть ли у Вас решение? Может я зря страдаю?)

Avatar
Евгений Денисюк
Цитата от vladislav pozdeev

Прямо сейчас я костылю реализацию
https://pastebin.com/P2bnssdQ

Есть ли у Вас решение? Может я зря страдаю?)

Пока не приступал, видимо на новогодних как раз будет время, свободное от работы. Я до появления externalAPI уже работал на костылях, внедрялся во внутренний объект. На текущий момент RnD провел, потенциальных вектора два:
1. Внедряться в вебпак-бандл, выводя нужный класс, где есть все в глобальную область видимости - в процессе, шанс так себе

2. Фолбэк решение - что-то типа MutationObserver на доме и отслеживать все что надо и кликать по дом-дереву, благо победить внедрение в песочницу страницы из расширения удалось. 

Проблемы всего этого в том, что будет падать с любым очередным релизом витрины :( и придется заниматься этим, я не понимаю, почему команда Яндекса игнорит просьбу, им прокинуть класс наружу - 1 коммит на 15мин работы от силы, даже externalAPI не надо делать и доки писать, сами разберемся во всем.

Avatar
vladislav pozdeev
Цитата от Евгений Денисюк

Пока не приступал, видимо на новогодних как раз будет время, свободное от работы. Я до появления externalAPI уже работал на костылях, внедрялся во внутренний объект. На текущий момент RnD провел, потенциальных вектора два:
1. Внедряться в вебпак-бандл, выводя нужный класс, где есть все в глобальную область видимости - в процессе, шанс так себе

2. Фолбэк решение - что-то типа MutationObserver на доме и отслеживать все что надо и кликать по дом-дереву, благо победить внедрение в песочницу страницы из расширения удалось. 

Проблемы всего этого в том, что будет падать с любым очередным релизом витрины :( и придется заниматься этим, я не понимаю, почему команда Яндекса игнорит просьбу, им прокинуть класс наружу - 1 коммит на 15мин работы от силы, даже externalAPI не надо делать и доки писать, сами разберемся во всем.

От себя скажу - любая работа с MutationObserver для меня больная тема) Скорость страницы сильно падает из-за него (PS: мб у меня кривые руки), а тут ещё и слабая оптимизация нового дизайна - вообщем всё ужасно будет (очевидно - субъективное мнение)

Единственное решение которое я щас нахожу это реагировать на события Input, который отвечает за таймкод. Славу богу ререндеров там нету, поэтому можно один раз подписаться, и не наблюдать за его ререндарами через  MutationObserver

Avatar
Евгений Денисюк
Цитата от vladislav pozdeev

От себя скажу - любая работа с MutationObserver для меня больная тема) Скорость страницы сильно падает из-за него (PS: мб у меня кривые руки), а тут ещё и слабая оптимизация нового дизайна - вообщем всё ужасно будет (очевидно - субъективное мнение)

Единственное решение которое я щас нахожу это реагировать на события Input, который отвечает за таймкод. Славу богу ререндеров там нету, поэтому можно один раз подписаться, и не наблюдать за его ререндарами через  MutationObserver

Ну я пока в сторону внедрения в бандл рассматриваю версию, потом уже иные версию буду, MutationObserver это плохо для перфоманса, да, но как крайний случай. Много событий, на которые надо подписаться, чтобы реактивность в плагине была...

Avatar
vladislav pozdeev

Нашёл способ отслеживать изменения Input:

Object.defineProperties(getTimecodeInput(), { __REAL_VALUE: { writable: true },
value: { get() { return this.__REAL_VALUE; },
set(value) { onTimecodeChanged(this.__REAL_VALUE, value); this.__REAL_VALUE = value; } } }

Возможно будет полезным

Avatar
vladislav pozdeev
Цитата от vladislav pozdeev

От себя скажу - любая работа с MutationObserver для меня больная тема) Скорость страницы сильно падает из-за него (PS: мб у меня кривые руки), а тут ещё и слабая оптимизация нового дизайна - вообщем всё ужасно будет (очевидно - субъективное мнение)

Единственное решение которое я щас нахожу это реагировать на события Input, который отвечает за таймкод. Славу богу ререндеров там нету, поэтому можно один раз подписаться, и не наблюдать за его ререндарами через  MutationObserver

https://i.ibb.co/rZkJjkt/image.png

Они даже это API не вырезали, просто не прокинули в window ;(