07.07.2021, 15:07
|
Новичок на форуме
|
|
Регистрация: 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 код на странице. Необходимо получить ее значение. Возможно ли это в принципе? Вроде в теории можно вызывать функции данного фреймворка по номеру, но тут я совсем понимаю параметры вызова.
Заранее спасибо за помощь. Жду ответа.
|
|
07.07.2021, 16:21
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,587
|
|
Просто идёшь вверх и смотришь:
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.
|
|
07.07.2021, 21:30
|
Новичок на форуме
|
|
Регистрация: 07.07.2021
Сообщений: 5
|
|
Огромное спасибо. В принципе немного понял как оно устроено.
Я так понимаю, что это выгрузка этих функций. Только при запуске Вашего кода в Chrome Debug Console выдает ошибку:
VM529:4 Uncaught TypeError: webpackJsonp.push is not a function
|
|
07.07.2021, 21:46
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,587
|
|
Странно. М.б. не актуальная версия вебпака там юзается. Тут без кода не разобраться. Там в самом верху должно быть что-то типа
window['webpackJsonp'] = ...
кинь сюда, посмотрю.
__________________
29375, 35
|
|
07.07.2021, 22:55
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,587
|
|
Rise, для того он и предназначен.) (или юзескриптов)
__________________
29375, 35
|
|
07.07.2021, 23:46
|
Новичок на форуме
|
|
Регистрация: 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()()
}
Вроде больше нет нигде ничего похожего.
|
|
08.07.2021, 00:05
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,587
|
|
NIIL, а webpackHotUpdate там рядом случаем нет?
Если нет, то тут всё сложнее. Это webpack 3 и так просто в него уже не внедриться после загрузки.)
Для чего вам это вообще надо? Для юзерскрипта или для чего-то иного? В можете запускать код до загрузки страницы?
__________________
29375, 35
|
|
08.07.2021, 00:28
|
Новичок на форуме
|
|
Регистрация: 07.07.2021
Сообщений: 5
|
|
webpackHotUpdate - не встречал.
На самом деле эта переменная нужна для обращения к php скрипту на сайте. Сам же парсер, который я пишу на Delphi, может использовать Chrome компонент, в котором будет выполняться скрипт и присваивать свойству любого поля странице - значение переменной... Это конечно грабли, но пока я не вижу способов это все упростить. Данная переменная генерируется для каждой сессии, поэтому использовать полученную через браузер, а потом вставить в приложение, к сожалению, не получится
|
|
08.07.2021, 00:54
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,587
|
|
Тамщем вот это:
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.
|
|
08.07.2021, 21:49
|
Новичок на форуме
|
|
Регистрация: 07.07.2021
Сообщений: 5
|
|
Спасибо огромное. Попробую
|
|
|
|