49 lines
1.8 KiB
JavaScript
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;
|
|
} |