'use strict' /* eslint-env browser */ /* globals chrome */ function inject(src, id, message) { return new Promise((resolve) => { // Inject a script tag into the page to access methods of the window object const script = document.createElement('script') script.onload = () => { const onMessage = ({ data }) => { if (!data.wappalyzer || !data.wappalyzer[id]) { return } window.removeEventListener('message', onMessage) resolve(data.wappalyzer[id]) script.remove() } window.addEventListener('message', onMessage) window.postMessage({ wappalyzer: message, }) } script.setAttribute('src', chrome.runtime.getURL(src)) document.body.appendChild(script) }) } function getJs(technologies) { return inject('js/js.js', 'js', { technologies: technologies .filter(({ js }) => Object.keys(js).length) ....