(function() { /** * Check and set a global guard variable to * ensure that if this content script is injected into a page again, * it returns (and does nothing). */ if (window.hasRun) { return; } window.hasRun = true; /** * Given a URL for a beast image, remove all beasts, * then create and style an IMG node pointing to the image and * insert the node into the document. */ function insertBeast(beastURL) { removeExistingBeasts(); let beastImage = document.createElement("img"); beastImage.setAttribute("src", beastURL); beastImage.style.objectFit = "contain"; beastImage.style.position = "fixed"; beastImage.style.height = "100%"; beastImage.style.width = "100%"; beastImage.className = "beastify-image"; document.body.appendChild(beastImage); } /** * Remove all beasts from the page. */ function removeExistingBeasts() { let existingBeasts = document.querySelectorAll(".beastify-image"); for (let beast of existingBeasts) { beast.remove(); } } /** * Listen for messages from the background script. * Depending on the message, call "beastify()" or "reset()". */ browser.runtime.onMessage.addListener((message) => { if (message.command === "beastify") { insertBeast(message.beastURL); } else if (message.command === "reset") { removeExistingBeasts(); } }); })();