/** * 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 * IMPORT report_script * IMPORT report_settings * IMPORTS_END */ var port; var loaded = false; var scripts_awaiting = []; var nonce; function handle_message(message) { const [action, data] = message; if (action === "inject") { for (let script_text of data) { if (loaded) add_script(script_text); else scripts_awaiting.push(script_text); } } if (action === "settings") report_settings(data); } 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); report_script(script_text); } 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 */