/* global chrome */ // Firefox doesn't support ExecutionWorld.MAIN yet // https://bugzilla.mozilla.org/show_bug.cgi?id=1736575 function executeScriptForFirefoxInMainWorld({target, files}) { return chrome.scripting.executeScript({ target, func: fileNames => { function injectScriptSync(src) { let code = ''; const request = new XMLHttpRequest(); request.addEventListener('load', function () { code = this.responseText; }); request.open('GET', src, false); request.send(); const script = document.createElement('script'); script.textContent = code; // This script runs before the element is created, // so we add the script to instead. if (document.documentElement) { document.documentElement.appendChild(script); } if (script.parentNode) { script.parentNode.removeChild(script); } } fileNames.forEach(file => injectScriptSync(chrome.runtime.getURL(file))); }, args: [files], }); } export function executeScriptInIsolatedWorld({target, files}) { return chrome.scripting.executeScript({ target, files, world: chrome.scripting.ExecutionWorld.ISOLATED, }); } export function executeScriptInMainWorld({target, files}) { if (__IS_FIREFOX__) { return executeScriptForFirefoxInMainWorld({target, files}); } return chrome.scripting.executeScript({ target, files, world: chrome.scripting.ExecutionWorld.MAIN, }); }