Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.07.2021, 15:07
Новичок на форуме
Отправить личное сообщение для NIIL Посмотреть профиль Найти все сообщения от NIIL
 
Регистрация: 07.07.2021
Сообщений: 5

Получение переменных из webpackJsonp
Добрый день. Не силен в JavaScript и ранее с webpackJsonp вообще не работал.

Есть набор скриптов данного фреймворка с функциями, среди которых есть:

1527: function(t, e, a) {
"use strict";
(function(t) {
var i = a(0)
, o = a(26)
, n = a(878)
, s = a(123)
, r = a(134)
, c = a(337)
, u = a(2)
, l = a(51)
, h = a(1464)
, d = a(36)
, p = a(1443)
, f = a(880)
, m = a(126)
, v = a(1528)
, b = a(133)
, g = a(338)
, _ = a(1487)
, S = a(85)
, y = a(6)
, w = a(4)
, O = a(782)
, C = a(29)
, D = a(519)
, P = a(1529)
, j = null
, k = new n.a
, T = function(e) {
function n(t, a) {
var i = e.call(this, a) || this;
return i.directServiceUrl = t,
i
}
return Object(i.e)(n, e),

...

n.prototype.getRoomData = function(t) {
var e, a, i, o, n, s = chat.performerData ? "1" : "", r = (null === (a = null === (e = u.a.getState()) || void 0 === e ? void 0 : e.chatOptions) || void 0 === a ? void 0 : a.chatDirect) && (null === (o = null === (i = u.a.getState()) || void 0 === i ? void 0 : i.chatExtra) || void 0 === o ? void 0 : o.hitUrl) ? "1" : "";
return chat.debug("getRoomData", t),
Object(b.a)({
url: this.directServiceUrl,
method: "getRoomData",
headers: {
"X-ab-Split-Group": (null === (n = u.a.getState()) || void 0 === n ? void 0 : n.chatABSplitGroup) || ""
},
args: [t, s, r]
})
}

...


В getRoomData есть локальная переменная n.chatABSplitGroup. Найти место где она инициализируется я не смог.
Так как я не могу менять скрипты, но могу выполнить javascrpt код на странице. Необходимо получить ее значение. Возможно ли это в принципе? Вроде в теории можно вызывать функции данного фреймворка по номеру, но тут я совсем понимаю параметры вызова.
Заранее спасибо за помощь. Жду ответа.
Ответить с цитированием
  #2 (permalink)  
Старый 07.07.2021, 16:21
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,590

Просто идёшь вверх и смотришь:
n.chatABSplitGroup
n = u.a.getState()
u = a(2)
a - это внутренний webpack require
webpack - один из самых популярных сборщиков, скачивашь какой-нить пример, билдишь и смотришь как оно там внутрях устроено.

Но я те облегчу задачу, как-то так можно внедриться и получать модули изнутри:
if(!window['__webpack_require__']) {
  window['__webpack_require__'] = (key => {
    let require;
    webpackJsonp.push([[key],{[key](...a) {require = a[2]}},[[key, key]]]);
    return require;
  })(String(Math.random()));
};

function getChatABSplitGroup() {
  const u = __webpack_require__(2);
  const state = u.a.getState();
  return state && state.chatABSplitGroup || "";
}

console.log(getChatABSplitGroup());


Ток следует помнить, что при следующей версии как циферка 2, так и ключ .a могут поменяться, т.к. являются результатом минимизации.
__________________
29375, 35

Последний раз редактировалось Aetae, 07.07.2021 в 16:28.
Ответить с цитированием
  #3 (permalink)  
Старый 07.07.2021, 21:30
Новичок на форуме
Отправить личное сообщение для NIIL Посмотреть профиль Найти все сообщения от NIIL
 
Регистрация: 07.07.2021
Сообщений: 5

Огромное спасибо. В принципе немного понял как оно устроено.
Я так понимаю, что это выгрузка этих функций. Только при запуске Вашего кода в Chrome Debug Console выдает ошибку:

VM529:4 Uncaught TypeError: webpackJsonp.push is not a function
Ответить с цитированием
  #4 (permalink)  
Старый 07.07.2021, 21:46
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,590

Странно. М.б. не актуальная версия вебпака там юзается. Тут без кода не разобраться. Там в самом верху должно быть что-то типа
window['webpackJsonp'] = ...
кинь сюда, посмотрю.
__________________
29375, 35
Ответить с цитированием
  #5 (permalink)  
Старый 07.07.2021, 22:55
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,590

Rise, для того он и предназначен.) (или юзескриптов)
__________________
29375, 35
Ответить с цитированием
  #6 (permalink)  
Старый 07.07.2021, 23:46
Новичок на форуме
Отправить личное сообщение для NIIL Посмотреть профиль Найти все сообщения от NIIL
 
Регистрация: 07.07.2021
Сообщений: 5

Нашел только в основном скрипте перед подключением других модулей js следующий код:

var n = window.webpackJsonp;
window.webpackJsonp = function(e, i, o) {
for (var s, r, c = 0, l = []; c < e.length; c++)
r = e[c],
a[r] && l.push(a[r][0]),
a[r] = 0;
for (s in i)
Object.prototype.hasOwnProperty.call(i, s) && (t[s] = i[s]);
for (n && n(e, i, o); l.length; )
l.shift()()
}

Вроде больше нет нигде ничего похожего.
Ответить с цитированием
  #7 (permalink)  
Старый 08.07.2021, 00:05
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,590

NIIL, а webpackHotUpdate там рядом случаем нет?
Если нет, то тут всё сложнее. Это webpack 3 и так просто в него уже не внедриться после загрузки.)
Для чего вам это вообще надо? Для юзерскрипта или для чего-то иного? В можете запускать код до загрузки страницы?
__________________
29375, 35
Ответить с цитированием
  #8 (permalink)  
Старый 08.07.2021, 00:28
Новичок на форуме
Отправить личное сообщение для NIIL Посмотреть профиль Найти все сообщения от NIIL
 
Регистрация: 07.07.2021
Сообщений: 5

webpackHotUpdate - не встречал.
На самом деле эта переменная нужна для обращения к php скрипту на сайте. Сам же парсер, который я пишу на Delphi, может использовать Chrome компонент, в котором будет выполняться скрипт и присваивать свойству любого поля странице - значение переменной... Это конечно грабли, но пока я не вижу способов это все упростить. Данная переменная генерируется для каждой сессии, поэтому использовать полученную через браузер, а потом вставить в приложение, к сожалению, не получится
Ответить с цитированием
  #9 (permalink)  
Старый 08.07.2021, 00:54
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,590

Тамщем вот это:
Object.defineProperty(Function.prototype, 'c', {
  configurable: true,
  set(value) {
    if(
      typeof value === 'object'
      && 'e' in this
      && 'm' in this
      && !window['__webpack_require__']
    ) {
      window['__webpack_require__'] = this;
      delete Function.prototype['c'];
    }
    Object.defineProperty(this, 'c', {
      writable: true,
      configurable: true,
      enumerable: true,
      value
    });
  }
});

надо запустить до всего кода страницы(в расширениях это document_start, не знаю как ты подрубаешься к браузеру), а дальше, после загрузки, также:
function getChatABSplitGroup() {
  const u = __webpack_require__(2);
  const state = u.a.getState();
  return state && state.chatABSplitGroup || "";
}

console.log(getChatABSplitGroup());
__________________
29375, 35

Последний раз редактировалось Aetae, 08.07.2021 в 12:10.
Ответить с цитированием
  #10 (permalink)  
Старый 08.07.2021, 21:49
Новичок на форуме
Отправить личное сообщение для NIIL Посмотреть профиль Найти все сообщения от NIIL
 
Регистрация: 07.07.2021
Сообщений: 5

Спасибо огромное. Попробую
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Записать данные из переменных в локальный JSON CryNet Общие вопросы Javascript 9 12.01.2019 19:30
Как и где задать цикл? Blondinka Events/DOM/Window 2 10.06.2014 15:29
Сложение переменных wings-fury Общие вопросы Javascript 3 13.04.2012 23:40
$.getJSON - получение нескольких переменных leny AJAX и COMET 5 05.02.2012 19:04
Получение в JavaScript значений переменных, посланных методом POST Ratibor Redoran Общие вопросы Javascript 5 08.06.2010 16:36