47 lines
1.5 KiB
JavaScript
47 lines
1.5 KiB
JavaScript
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')
|
|
}
|
|
)
|
|
);
|
|
} |