From 7f368d46ea06164da025c1ac4ed9a65ad23b25ef Mon Sep 17 00:00:00 2001 From: Wojtek Kosior Date: Wed, 12 May 2021 16:00:09 +0200 Subject: stop using js modules --- content/main.js | 162 ++++++++++++++++++++++++----------------------- content/page_actions.js | 63 ++++++++++++++++++ content/page_actions.mjs | 58 ----------------- 3 files changed, 145 insertions(+), 138 deletions(-) create mode 100644 content/page_actions.js delete mode 100644 content/page_actions.mjs (limited to 'content') diff --git a/content/main.js b/content/main.js index 12a94c9..282c7b5 100644 --- a/content/main.js +++ b/content/main.js @@ -1,95 +1,97 @@ /** -* Myext main content script run in all frames -* -* Copyright (C) 2021 Wojtek Kosior -* -* Dual-licensed under: -* - 0BSD license -* - GPLv3 or (at your option) any later version -*/ + * Myext main content script run in all frames + * + * Copyright (C) 2021 Wojtek Kosior + * + * Dual-licensed under: + * - 0BSD license + * - GPLv3 or (at your option) any later version + */ -var url_re = /^([^#]*)((#[^#]*)(#.*)?)?$/; -var match = url_re.exec(document.URL); -var base_url = match[1]; -var first_target = match[3]; -var second_target = match[4]; +"use strict"; -var block = true; -if (first_target !== undefined && - first_target === "#myext-allow") { - block = false; - console.log(["allowing", document.URL]); - if (second_target !== undefined) - window.location.href = base_url + second_target; - else - history.replaceState(null, "", base_url); -} else { - console.log(["not allowing", document.URL]); -} +(() => { + const handle_page_actions = window.handle_page_actions; -function handle_mutation(mutations, observer) -{ - if (document.readyState === 'complete') { - console.log("complete"); - observer.disconnect(); - return; + var url_re = /^([^#]*)((#[^#]*)(#.*)?)?$/; + var match = url_re.exec(document.URL); + var base_url = match[1]; + var first_target = match[3]; + var second_target = match[4]; + + var block = true; + if (first_target !== undefined && + first_target === "#myext-allow") { + block = false; + console.log(["allowing", document.URL]); + if (second_target !== undefined) + window.location.href = base_url + second_target; + else + history.replaceState(null, "", base_url); + } else { + console.log(["not allowing", document.URL]); } - for (let mutation of mutations) { - for (let node of mutation.addedNodes) { - if (node.tagName === "SCRIPT") - block_script(node); - else - sanitize_attributes(node); + + function handle_mutation(mutations, observer) + { + if (document.readyState === 'complete') { + console.log("complete"); + observer.disconnect(); + return; + } + for (let mutation of mutations) { + for (let node of mutation.addedNodes) { + if (node.tagName === "SCRIPT") + block_script(node); + else + sanitize_attributes(node); + } } } -} -function block_script(node) -{ - console.log(node); + function block_script(node) + { + console.log(node); - /* - * Disabling scripts this way allows them to still be relatively accessed - * in case they contain some useful data. - */ - if (node.hasAttribute("type")) - node.setAttribute("blocked-type", node.getAttribute("type")); - node.setAttribute("type", "application/json"); -} + /* + * Disabling scripts this way allows them to still be relatively + * easily accessed in case they contain some useful data. + */ + if (node.hasAttribute("type")) + node.setAttribute("blocked-type", node.getAttribute("type")); + node.setAttribute("type", "application/json"); + } -function sanitize_attributes(node) -{ - if (node.attributes === undefined) - return; + function sanitize_attributes(node) + { + if (node.attributes === undefined) + return; - /* We have to do it in 2 loops, removing attribute modifies our iterator */ - let attr_names = []; - for (let attr of node.attributes) { - let attr_name = attr.localName; - if (attr_name.startsWith("on")) - attr_names.push(attr_name); - } + /* + * We have to do it in 2 loops, removing attribute modifies + * our iterator + */ + let attr_names = []; + for (let attr of node.attributes) { + let attr_name = attr.localName; + if (attr_name.startsWith("on")) + attr_names.push(attr_name); + } - for (let attr_name of attr_names) { - node.removeAttribute(attr_name); - console.log("sanitized", attr_name); + for (let attr_name of attr_names) { + node.removeAttribute(attr_name); + console.log("sanitized", attr_name); + } } -} -async function run_module() -{ - let src = chrome.runtime.getURL("content/page_actions.mjs"); - let module = await import(src); - module.default(); -} - -if (block) { - var observer = new MutationObserver(handle_mutation); - observer.observe(document.documentElement, { - attributes: true, - childList: true, - subtree: true - }); -} + if (block) { + var observer = new MutationObserver(handle_mutation); + observer.observe(document.documentElement, { + attributes: true, + childList: true, + subtree: true + }); + } -run_module(); + handle_page_actions(); +})(); 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; +})(); diff --git a/content/page_actions.mjs b/content/page_actions.mjs deleted file mode 100644 index 3ce5b73..0000000 --- a/content/page_actions.mjs +++ /dev/null @@ -1,58 +0,0 @@ -/** -* 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 -*/ - -import CONNECTION_TYPE from '/common/connection_types.mjs'; -import make_once from '/common/once.mjs'; -import browser from '/common/browser.mjs'; - -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); -} - -export default function main() { - document.addEventListener("DOMContentLoaded", document_loaded); - port = browser.runtime.connect({name : CONNECTION_TYPE.PAGE_ACTIONS}); - port.onMessage.addListener(handle_message); - port.postMessage({url: document.URL}); -} -- cgit v1.2.3