diff --git a/chrome/BUILD b/chrome/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..c180dd6600472cda131f744b11e59e52ed0acbb8 --- /dev/null +++ b/chrome/BUILD @@ -0,0 +1 @@ +source edge/BUILD diff --git a/edge/BUILD b/edge/BUILD index cbfeb4d021de2b45c9b9afa886f1cad806dd5dc8..05cc1277efda413a7aaee4af1b0def5a291396ba 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 8e2830636b450096ade982f6b07c653c2a82da4b..e597657af5cd246b3419f9676b7791ec52db8820 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 5e26fd585e170d49ef0fbd0e3934cb21a0ecfd64..25009589cec73d4986636baf17591e0f45f93b5b 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 1a33e4bbc281049e507ddb3a4f3900338b53c1ed..9b12a888e020b69c4c7505b1b97bdf926c720fb5 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 8e5f4deb587388f2a080f8dd083829b910a07daa..22d58cd64c706c5cfc885334766551ffbe6ceabb 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)); } });