improve redirect tab
This commit is contained in:
		| @ -5,13 +5,16 @@ | |||||||
|             // console.log(request); |             // console.log(request); | ||||||
|             let data = extractData(request.itemsSelector, request.fieldSelectors); |             let data = extractData(request.itemsSelector, request.fieldSelectors); | ||||||
|             // console.log(data); |             // console.log(data); | ||||||
|             sendResponse(data); |             if (sendResponse) sendResponse(data); | ||||||
|         } else if (request.from == "doExtractGotoUrl") { |         } else if (request.from == "doExtractGotoUrl") { | ||||||
|             // console.log(request); |             // console.log(request); | ||||||
|             window.location.replace(request.url); |             window.location.replace(request.url); | ||||||
|         } else if (request.from == "doExtractReportIn") { |         } else if (request.from == "doExtractReportIn") { | ||||||
|             // console.log("doExtractReportIn"); |             // console.log("doExtractReportIn"); | ||||||
|             sendResponse(request.from); |             if (sendResponse) sendResponse(request.from); | ||||||
|  |         } else if (request.from == "doExtractQueryUrl") { | ||||||
|  |             // console.log("doExtractReportIn"); | ||||||
|  |             if (sendResponse) sendResponse(window.location.href); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| ); | ); | ||||||
|  | |||||||
| @ -69,42 +69,76 @@ function extractTabData(tab, itemsSelector, fieldSelectors) { | |||||||
| } | } | ||||||
|  |  | ||||||
| function redirectTab(tab, url) { | function redirectTab(tab, url) { | ||||||
|     let done = false; |  | ||||||
|     let timeOut; |  | ||||||
|     return new Promise((resolve, reject) => { |     return new Promise((resolve, reject) => { | ||||||
|         let req = { |         let req = { | ||||||
|             from: "doExtractGotoUrl", |             from: "doExtractGotoUrl", | ||||||
|             url: url |             url: url | ||||||
|         } |         } | ||||||
|         chrome.tabs.sendMessage(tab.id, req, r => { |         let curUrl = ""; | ||||||
|             // if (r != req.from) return; |         queryUrl(tab) | ||||||
|             // detectLoop(); |             .then(u => { | ||||||
|             setTimeout(() => { |                 if (url !== u) { | ||||||
|                 detectLoop(); |                     curUrl = u; | ||||||
|             }, 500); |                     chrome.tabs.sendMessage(tab.id, req); | ||||||
|         }); |                 } | ||||||
|         setTimeout(() => { |             }) | ||||||
|             if (!done) { |             .then(() => queryUrl(tab, curUrl)) | ||||||
|                 reject(`redirectTab failed after 10 second.`); |             .then(() => reportIn(tab)) | ||||||
|                 clearTimeout(timeOut); |             .then(tab => resolve(tab)) | ||||||
|  |             .catch(err => reject(err)); | ||||||
|  |     }); | ||||||
| } | } | ||||||
|         }, 10000); |  | ||||||
|  |  | ||||||
|         function detectLoop() { | function reportIn(tab) { | ||||||
|     let req = { |     let req = { | ||||||
|         from: "doExtractReportIn" |         from: "doExtractReportIn" | ||||||
|     } |     } | ||||||
|             chrome.tabs.sendMessage(tab.id, req, r => { |     return new Promise((resolve, reject) => { | ||||||
|                 if (r != req.from) return; |         let timeOut; | ||||||
|                 resolve(tab) |         let rejectTimeout = setTimeout(() => { | ||||||
|                 done = true; |             reject(`reportIn failed after 10 second.`); | ||||||
|             }); |  | ||||||
|             if (!done) { |  | ||||||
|             clearTimeout(timeOut); |             clearTimeout(timeOut); | ||||||
|  |         }, 10000); | ||||||
|  |         loop(); | ||||||
|  |  | ||||||
|  |         function loop() { | ||||||
|  |             chrome.tabs.sendMessage(tab.id, req, r => { | ||||||
|  |                 if (r == req.from) { | ||||||
|  |                     resolve(tab); | ||||||
|  |                     clearTimeout(rejectTimeout); | ||||||
|  |                 } else { | ||||||
|                     timeOut = setTimeout(() => { |                     timeOut = setTimeout(() => { | ||||||
|                     detectLoop(); |                         loop(); | ||||||
|                 }, 100); |                     }, 500); | ||||||
|                 } |                 } | ||||||
|  |             }); | ||||||
|  |         } | ||||||
|  |     }); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function queryUrl(tab, urlExcluded) { | ||||||
|  |     let req = { | ||||||
|  |         from: "doExtractQueryUrl" | ||||||
|  |     } | ||||||
|  |     return new Promise((resolve, reject) => { | ||||||
|  |         let timeOut; | ||||||
|  |         let rejectTimeout = setTimeout(() => { | ||||||
|  |             reject(`queryUrl failed after 10 second.`); | ||||||
|  |             clearTimeout(timeOut); | ||||||
|  |         }, 10000); | ||||||
|  |         loop(); | ||||||
|  |  | ||||||
|  |         function loop() { | ||||||
|  |             chrome.tabs.sendMessage(tab.id, req, url => { | ||||||
|  |                 if (url && (!urlExcluded || (urlExcluded && urlExcluded != url))) { | ||||||
|  |                     resolve(url); | ||||||
|  |                     clearTimeout(rejectTimeout); | ||||||
|  |                 } else { | ||||||
|  |                     timeOut = setTimeout(() => { | ||||||
|  |                         loop(); | ||||||
|  |                     }, 500); | ||||||
|  |                 } | ||||||
|  |             }); | ||||||
|         } |         } | ||||||
|     }); |     }); | ||||||
| } | } | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user