Извлечение значений из текста элемента скрипта, как если бы вы делали это из строки:
function extractor(names) {
const r = new RegExp(names.map(n => `\\b(${n}):\\s*'(.*?)'`).join('|'), 'g');
for (const script of document.getElementsByTagName('script')) {
const text = script.textContent;
let match = r.exec(text);
if (match) {
const vars = {};
do {
const [/*source*/, name, value] = match;
vars[name] = value;
match = r.exec(text);
} while (match);
return vars;
}
}
}
При использовании всплывающего окна расширения для извлечения из веб-страницы нам нужна вспомогательная функция, которая запускаеткод в качестве скрипта содержимого:
function extractPageScriptVars(names) {
return new Promise(resolve => {
chrome.tabs.executeScript({
code: '(() => (' + extractor + ')(' + JSON.stringify(names) + '))()',
}, ([vars]) => resolve(vars));
});
}
Использование:
(async () => {
const vars = await extractPageScriptVars(['AAA', 'BBB']);
alert(JSON.stringify(vars, null, ' '));
})();
В случае, если скрипт содержит допустимый объект JSON / JS, вы можете найти его начальный / конечный индексы и извлечь всю декларациюstring, затем проанализируйте его с помощью JSON.parse, который создает объект / массив, который вы можете использовать напрямую.