js doc and code optimize
This commit is contained in:
@ -1,15 +1,23 @@
|
||||
chrome.runtime.onMessage.addListener(
|
||||
function (request, sender, sendResponse) {
|
||||
// console.log(request);
|
||||
if (request.from == "DataExtracter:Extract") {
|
||||
let data = extractData(request.itemsSelector, request.fieldSelectors);
|
||||
if (sendResponse) sendResponse(data);
|
||||
} else if (request.from == "DataExtracter:GotoUrl") {
|
||||
window.location.replace(request.url);
|
||||
} else if (request.from == "DataExtracter:ReportIn") {
|
||||
if (sendResponse) sendResponse(request.from);
|
||||
} else if (request.from == "DataExtracter:QueryUrl") {
|
||||
if (sendResponse) sendResponse(window.location.href);
|
||||
switch (request.from) {
|
||||
case "DataExtracter:Extract":
|
||||
let data = extractData(request.itemsSelector, request.fieldSelectors);
|
||||
if (sendResponse) sendResponse(data);
|
||||
break;
|
||||
case "DataExtracter:GotoUrl":
|
||||
window.location.replace(request.url);
|
||||
if (sendResponse) sendResponse(request.url);
|
||||
break;
|
||||
case "DataExtracter:ReportIn":
|
||||
if (sendResponse) sendResponse(request.from);
|
||||
break;
|
||||
case "DataExtracter:QueryUrl":
|
||||
if (sendResponse) sendResponse(window.location.href);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
);
|
||||
@ -49,12 +57,9 @@ function extract(itemsSelector:string, fieldSelectors:string, url:string, pages:
|
||||
}
|
||||
|
||||
function testArgs(...args) {
|
||||
|
||||
if (args.length < 2) return false;
|
||||
|
||||
if (args.length == 2)
|
||||
return (args[0] && args[1] && (typeof args[0] == "string") && (args[1] instanceof Array))
|
||||
|
||||
let urls = [];
|
||||
if (args.length > 2) return (typeof args[2] == "string") && (
|
||||
(args[3] instanceof Array) ||
|
||||
|
||||
@ -1,5 +1,10 @@
|
||||
// function extract(itemsSelector, fieldSelectors, url, from, to, interval)
|
||||
// function extract(itemsSelector, fieldSelectors, url, pages)
|
||||
/**
|
||||
* Extract data from current tab / multiple urls.
|
||||
* @param {string} itemsSelector items selectors for selecting items (data rows)
|
||||
* @param {Array<string>} fieldSelectors fields selectors for selecting fields (data columns) under each item
|
||||
* @param {string} url url template to generate urls by filling with page numers.
|
||||
* @param {...number} args page numers, either [from, to, interval] or [...pages]
|
||||
*/
|
||||
function extract(itemsSelector, fieldSelectors, url, ...args) {
|
||||
let urls = [];
|
||||
if (url) {
|
||||
@ -65,6 +70,13 @@ function redirectTab(tab, url) {
|
||||
.then(() => reportIn(tab));
|
||||
}
|
||||
|
||||
/**
|
||||
* extract data in from the target tab, usually used to detect if the content script is ready.
|
||||
* @param {any} tab target tab
|
||||
* @param {string} itemsSelector items selectors for selecting items (data rows)
|
||||
* @param {Array<string>} fieldSelectors fields selectors for selecting fields (data columns) under each item
|
||||
* @returns {Promise<string[]>} a promise of extracted data
|
||||
*/
|
||||
function extractData(tab, itemsSelector, fieldSelectors) {
|
||||
let req = {
|
||||
from: "DataExtracter:Extract",
|
||||
@ -76,6 +88,11 @@ function extractData(tab, itemsSelector, fieldSelectors) {
|
||||
return sendMessageAndDetect(tab, req, cond, failMsg);
|
||||
}
|
||||
|
||||
/**
|
||||
* get report in from the target tab, usually used to detect if the content script is ready.
|
||||
* @param {any} tab target tab
|
||||
* @returns {Promise<string>} a promise of the report in message
|
||||
*/
|
||||
function reportIn(tab) {
|
||||
let req = {
|
||||
from: "DataExtracter:ReportIn"
|
||||
@ -85,6 +102,12 @@ function reportIn(tab) {
|
||||
return sendMessageAndDetect(tab, req, cond, failMsg);
|
||||
}
|
||||
|
||||
/**
|
||||
* get the url of the target tab
|
||||
* @param {any} tab target tab
|
||||
* @param {string} urlExcluded if specified, queryUrl resolves only when response not equals to urlExcluded
|
||||
* @returns {Promise<string>} a promise of the url
|
||||
*/
|
||||
function queryUrl(tab, urlExcluded) {
|
||||
let req = {
|
||||
from: "DataExtracter:QueryUrl"
|
||||
@ -96,13 +119,13 @@ function queryUrl(tab, urlExcluded) {
|
||||
|
||||
/**
|
||||
* Repeatedly sending a message to target tab until the response is detected good.
|
||||
* The response is returned with the Promise.
|
||||
* @param {chrome.tab} tab the table where to send the message
|
||||
* @param {object} tab the table where to send the message
|
||||
* @param {object} req the request data.
|
||||
* @param {function} cond success condition function, r:any=>boolean
|
||||
* @param {string} failMsg message when failed after time out
|
||||
* @param {number} failedTimeOut fail time out
|
||||
* @param {number} detectInterval interval for detecting
|
||||
* @return {Promise} a promise of the response.
|
||||
*/
|
||||
function sendMessageAndDetect(tab, req, cond, failMsg, failedTimeOut, detectInterval) {
|
||||
failedTimeOut = failedTimeOut || 10000;
|
||||
|
||||
Reference in New Issue
Block a user