diff options
Diffstat (limited to 'src/background')
| -rw-r--r-- | src/background/run-ocr.ts | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/background/run-ocr.ts b/src/background/run-ocr.ts new file mode 100644 index 0000000..4476f54 --- /dev/null +++ b/src/background/run-ocr.ts @@ -0,0 +1,42 @@ +const OFFSCREEN_DOCUMENT_PATH = "offscreen/ocr/index.html"; + +// Function to ensure the offscreen document is open +async function setupOffscreenDocument() { + if (await chrome.offscreen.hasDocument()) { + return; // Offscreen document already open + } + await chrome.offscreen.createDocument({ + url: OFFSCREEN_DOCUMENT_PATH, + reasons: [chrome.offscreen.Reason.CLIPBOARD], + justification: "Performing OCR with Tesseract.js in a long-running context." + }); +} + +// Listen for messages from content scripts (and popup if applicable) +chrome.runtime.onMessage.addListener((message, sender, sendResponse) => { + if (message.type === "OCR" && message.dataURL) { + (async () => { + try { + // Ensure the offscreen document is open + await setupOffscreenDocument(); + + // Send the OCR request to the offscreen document + const offscreenResponse = await chrome.runtime.sendMessage({ + type: "OFFSCREEN_OCR_REQUEST", + dataURL: message.dataURL + }); + + if (offscreenResponse && offscreenResponse.success) { + sendResponse({ success: true, text: offscreenResponse.text }); + } else { + sendResponse({ success: false, error: offscreenResponse?.error || "Unknown OCR error" }); + } + } catch (error) { + sendResponse({ success: false, error: (error as Error).message }); + } + })(); + return true; // Indicate async response + } + + return false; +}); |
