/** * Myext handling of page actions in content scripts * * Copyright (C) 2021 Wojtek Kosior * Redistribution terms are gathered in the `copyright' file. */ /* * IMPORTS_START * IMPORT CONNECTION_TYPE * IMPORT browser * IMPORTS_END */ var port; var loaded = false; var scripts_awaiting = []; var nonce; function handle_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) { 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; } /* * EXPORTS_START * EXPORT handle_page_actions * EXPORTS_END */