Как получить доступ к внутренним функциям встроенного JavaScript веб-сайта из пользовательского сценария Tampermonkey беJavascript

Форум по Javascript
Anonymous
Как получить доступ к внутренним функциям встроенного JavaScript веб-сайта из пользовательского сценария Tampermonkey бе

Сообщение Anonymous »

Я пишу пользовательский скрипт Tampermonkey для https://wplace.live.
Сайт отображает карту мира в HTML . Я хочу наложить изображение, которое остается выровненным по карте, пока пользователь панорамирует и масштабирует ее.
Проблема в том, что сам элемент не перемещается в DOM, когда пользователь перемещает карту, поэтому я не могу определить текущую позицию карты непосредственно по изменениям DOM.
Во время отладки в DevTools я обнаружил внутреннюю функцию внутри одного из встроенных файлов JavaScript сайта, которая размещает маркер на карте. Этот маркер правильно остается прикрепленным к координатам карты во время панорамирования/масштабирования.
Когда я устанавливаю точку останова внутри этой функции (внутри класса zv, метода Place), я могу получить доступ к некоторым внутренним переменным. Из консоли в этой точке останова я могу предоставить помощник окну:

Код: Выделить всё

window.PlaceMarker = (x, y) => {
H.setLngLat({
lat: y / 10000,
lng: x / 10000
}).addTo(T);
};
Сделав это один раз, я могу вызвать PlaceMarker(0, 0) из своего пользовательского сценария, и он работает правильно.
Однако в настоящее время для этого требуется, чтобы пользователь:
  • Открыл DevTools
  • Установил точку останова
  • Дождитесь паузы выполнения
  • Вручную определите функцию в консоли
Я хочу полностью этого избежать.
Вопрос:
Можно ли из пользовательского сценария Tampermonkey программно получить доступ к внутренним переменным/функциям или подключиться к ним встроенный JavaScript сайта (который не отображается в окне) без использования точек останова вручную?
Я ищу общий подход (например, перехват скриптов, исправление обезьян, переопределение конструкторов и т. д.), который работает в этой ситуации.
В интересующем исходном файле я заметил строку этого типа this.markers.set(k, theVariableINeed), поэтому отсюда я смогу чтобы добиться того, что мне нужно, переопределив функцию set. Хотя это может сработать, это очень специфическое решение, и мне все равно хотелось бы узнать более общий подход к этой проблеме.

Подробнее здесь: https://stackoverflow.com/questions/798 ... m-a-tamper

Вернуться в «Javascript»