Извлеките значения из текста элемента скрипта, как если бы вы делали это из строки:
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, который создает объект / массив, который вы можете использовать напрямую.
You can use LSB appchecker to test your application/dynlib/shell script compatibility. After that you can use RPM for all RPM distribution and use alien for all apt-get distribution and tar.gz for other
Такие инструменты, как checkinstall
, помогут вам создавать пакеты для различных дистрибутивов. Лично, если вы хотите интегрироваться с существующими системами управления пакетами, вы также захотите разместить несколько репозиториев на своих серверах и предоставлять там пакеты, а затем попросить пользователей настроить свои диспетчеры пакетов для удаления приложений с ваших серверов.
В зависимости от того, что именно делает ваше программное обеспечение и какие зависимости (если таковые имеются) оно имеет от локальных библиотек, вы можете собрать свое программное обеспечение, используя более старый дистрибутив glibc, и заставить его работать во многих различных раздачи. Это то, что мы делаем с InstallBuilder . Если у вас нет зависимостей от конкретных пакетов, также можно создать пакеты RPM или DEB, которые будут работать в большинстве дистрибутивов Linux на основе RPM или DEB. Кросс-Linux разработка, в любом случае, это непросто :) Удачи!
Это один из случаев, описанных Бобом Айелло в этой статье об агентах сборки. У нас есть несколько клиентов, которые используют этот подход для параллельного построения нескольких платформ.