/** * Myext handling of page actions in content scripts * * Copyright (C) 2021 Wojtek Kosior * Redistribution terms are gathered in the `copyright' file. */ "use strict"; (() => { const CONNECTION_TYPE = window.CONNECTION_TYPE; const browser = window.browser; var port; var loaded = false; var scripts_awaiting = []; var nonce; function handle_message(message) { console.log(["message", message]); if (message.inject === undefined) return; for (let script_text of message.inject) { if (loaded) add_script(script_text); else scripts_awaiting.push(script_text); } } function document_loaded(event) { console.log("loaded"); loaded = true; for (let script_text of scripts_awaiting) add_script(script_text); scripts_awaiting = undefined; } function add_script(script_text) { let script = document.createElement("script"); script.textContent = script_text; script.setAttribute("nonce", nonce); document.body.appendChild(script); } function handle_page_actions(script_nonce) { document.addEventListener("DOMContentLoaded", document_loaded); port = browser.runtime.connect({name : CONNECTION_TYPE.PAGE_ACTIONS}); port.onMessage.addListener(handle_message); port.postMessage({url: document.URL}); nonce = script_nonce; } window.handle_page_actions = handle_page_actions; })();