Files
data-extracter-extesion/scripts/content/content.js
2020-01-10 12:07:21 +08:00

49 lines
1.8 KiB
JavaScript

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;
}