function extract(...args) { let message = { from: "DataExtracter:Extract", args: args } chrome.runtime.sendMessage(message, r => { if (r) console.log(r); }); } chrome.runtime.onMessage.addListener( function (request, sender, sendResponse) { if (!request.from) return; let [ext, act] = request.from.split(":"); if (ext.toLowerCase() !== 'dataextracter') return; // console.log(request); switch (act.toLowerCase()) { case "extract": let data = extractTabData(request.itemsSelector, request.fieldSelectors); if (sendResponse) sendResponse(data); break; case "gotourl": window.location.replace(request.url); if (sendResponse) sendResponse(request.url); break; case "reportin": if (sendResponse) sendResponse(request.from); break; case "queryurl": if (sendResponse) sendResponse(window.location.href); break; default: break; } } ); function extractTabData(itemsSelector, fieldSelectors) { return $(itemsSelector).toArray().map( item => fieldSelectors.map( selector => { let [cls, attr] = selector.split('@').slice(0, 2); return $(item).find(cls).toArray().map(find => attr ? find[attr] : find.textContent.trim()).join('\n') } ) ); }