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