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));
     }
 });