diff options
Diffstat (limited to 'content/page_actions.js')
-rw-r--r-- | content/page_actions.js | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/content/page_actions.js b/content/page_actions.js new file mode 100644 index 0000000..047bf24 --- /dev/null +++ b/content/page_actions.js @@ -0,0 +1,63 @@ +/** +* Myext handling of page actions in content scripts +* +* Copyright (C) 2021 Wojtek Kosior +* +* Dual-licensed under: +* - 0BSD license +* - GPLv3 or (at your option) any later version +*/ + +"use strict"; + +(() => { + const CONNECTION_TYPE = window.CONNECTION_TYPE; + const browser = window.browser; + + var port; + var loaded = false; + var scripts_awaiting = []; + + 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; + document.body.appendChild(script); + } + + function handle_page_actions() { + document.addEventListener("DOMContentLoaded", document_loaded); + port = browser.runtime.connect({name : CONNECTION_TYPE.PAGE_ACTIONS}); + port.onMessage.addListener(handle_message); + port.postMessage({url: document.URL}); + } + + window.handle_page_actions = handle_page_actions; +})(); |