chrome.runtime.onMessage.addListener( function (request, sender, sendResponse) { if (!request.action) return; // console.log("Recieved request:",request); switch (request.action) { case ACTION_EXTRACT: let data = extract(request.itemsSelector, request.fieldSelectors); if (sendResponse) sendResponse(data); break; case ACTION_GOTO_URL: window.location.replace(request.url); if (sendResponse) sendResponse(request.url); break; case ACTION_REPORT_IN: if (sendResponse) sendResponse(request.action); break; case ACTION_QUERY_URL: if (sendResponse) sendResponse(window.location.href); break; default: break; } } ); function extract(itemsSelector, fieldSelectors) { // let fieldNotFound = false; let items = Array.from(document.querySelectorAll(itemsSelector)); if (!items.length) return []; let results = items.map( item => { return fieldSelectors.map( selector => { let [cls, attr] = selector.split('@').slice(0, 2); // TODO: close tab to cancel task tip // if (fieldNotFound) return; let fieldVals = Array.from(item.querySelectorAll(cls)); // if (!fieldVals.length) { // fieldNotFound = true; // return; // } return fieldVals.map(find => attr ? find[attr] : find.textContent.trim()).join('\n') } ) } ); // return fieldNotFound ? [] : results return results; }