Hey guys so I’m building an extension but I have a function that is heavy when running and it’s blocking the load of the page and I was wondering if it was possible to only run it after the page is fully loaded and interactive either in the script or in manifest.json
?
I currently have it inside a window.onload
but still blocks the interactiveness of the page.
The script:
async function getEAN() { var EANIndex; var body = document.body.innerText; if ((EANIndex = body.indexOf('EAN')) !== -1) { body = body.slice(EANIndex, EANIndex + 100); const regexExpression = RegExp(/([^EAN]*$)*d{3}d{4,6}d{3,5}d/gm); return body.match(regexExpression)[0] } return false } window.onload = function() { if (window.location.pathname && location.hostname.indexOf(".google.com") !== -1) { console.log(getEAN()); } }
Would this be possible if yes how can I achieve it?
Advertisement
Answer
Since the content script itself is trivial, the problem is caused by catastrophic backtracking inside the regular expression, specifically ([^EAN]*$)*
which can match 0 characters at any place.
The solution is to use a look-behind condition:
/(?<=EANs*)d{11,15}/gm