From 31c91f8ee212629fbeb8ae39ac2217cbdbfd16a3 Mon Sep 17 00:00:00 2001 From: David Byers <david.byers@liu.se> Date: Sat, 20 Feb 2021 13:50:27 +0100 Subject: [PATCH] Chrome support. --- chrome/BUILD | 1 + edge/BUILD | 2 +- edge/manifest.override.json | 6 +++++- firefox/manifest.merge.json | 1 + scripts/build.sh | 2 +- shared/menu.js | 20 +++++++++++++++++++- 6 files changed, 28 insertions(+), 4 deletions(-) create mode 100644 chrome/BUILD diff --git a/chrome/BUILD b/chrome/BUILD new file mode 100644 index 0000000..c180dd6 --- /dev/null +++ b/chrome/BUILD @@ -0,0 +1 @@ +source edge/BUILD diff --git a/edge/BUILD b/edge/BUILD index cbfeb4d..05cc127 100644 --- a/edge/BUILD +++ b/edge/BUILD @@ -1,5 +1,5 @@ build --source firefox \ - --target edge \ + --target $target \ --override "edge/manifest.override.json" \ --ext zip diff --git a/edge/manifest.override.json b/edge/manifest.override.json index 8e28306..e597657 100644 --- a/edge/manifest.override.json +++ b/edge/manifest.override.json @@ -3,5 +3,9 @@ "16": "icon16x16.png", "32": "icon32x32.png", "128": "icon128x128.png" - } + }, + "permissions": [ + "clipboardWrite", + "contextMenus" + ] } diff --git a/firefox/manifest.merge.json b/firefox/manifest.merge.json index 5e26fd5..2500958 100644 --- a/firefox/manifest.merge.json +++ b/firefox/manifest.merge.json @@ -1,6 +1,7 @@ { "background": { "scripts": [ + "links.js", "menu.js" ] }, diff --git a/scripts/build.sh b/scripts/build.sh index 1a33e4b..9b12a88 100644 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -62,7 +62,7 @@ parse_args() { } setup_globals() { - TARGETS=(thunderbird firefox edge) + TARGETS=(thunderbird firefox edge chrome) BASEDIR="$( cd "$(dirname "${BASH_SOURCE[0]}")/.." >/dev/null 2>&1 && pwd )" BUILDDIR="$BASEDIR/build" diff --git a/shared/menu.js b/shared/menu.js index 8e5f4de..22d58cd 100644 --- a/shared/menu.js +++ b/shared/menu.js @@ -21,6 +21,24 @@ // Context menu +/* + * Workaround for Chrome + */ +async function copyToClipboard(text) { + try { + await navigator.clipboard.writeText(text); + } + catch { + const textArea = document.createElement('textarea'); + document.body.append(textArea); + textArea.textContent = text; + textArea.select(); + document.execCommand('copy'); + textArea.remove(); + } +} + + /* * Minimal polyfill for Chrome */ @@ -41,6 +59,6 @@ browser.menus.create({ browser.menus.onClicked.addListener((info, tab) => { if (info.menuItemId == "liu-safelinks-copy") { - navigator.clipboard.writeText(untangleLink(info.linkUrl)); + copyToClipboard(untangleLink(info.linkUrl)); } }); -- GitLab