mirror of
https://github.com/GoogleChrome/chrome-extensions-samples.git
synced 2026-04-12 06:09:05 +07:00
* Ignores archived samples * Uses eslint/recommended rules * Runs prettier and eslint (including --fix) pre-commit via husky * Adds new npm scripts: 'lint', 'lint:fix' and 'prettier' * Does not lint inline js code * Fix all prettier and eslint errors * Add custom prettier rules * Apply custom prettier rules * Update readme to explain how to setup the repo * addressed comments
49 lines
1.8 KiB
JavaScript
49 lines
1.8 KiB
JavaScript
// Copyright 2023 Google LLC
|
||
//
|
||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||
// you may not use this file except in compliance with the License.
|
||
// You may obtain a copy of the License at
|
||
//
|
||
// https://www.apache.org/licenses/LICENSE-2.0
|
||
//
|
||
// Unless required by applicable law or agreed to in writing, software
|
||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
// See the License for the specific language governing permissions and
|
||
// limitations under the License.
|
||
|
||
// The value that will be written to the clipboard.
|
||
const textToCopy = `Hello world!`;
|
||
|
||
// When the browser action is clicked, `addToClipboard()` will use an offscreen
|
||
// document to write the value of `textToCopy` to the system clipboard.
|
||
chrome.action.onClicked.addListener(async () => {
|
||
await addToClipboard(textToCopy);
|
||
});
|
||
|
||
// Solution 1 - As of Jan 2023, service workers cannot directly interact with
|
||
// the system clipboard using either `navigator.clipboard` or
|
||
// `document.execCommand()`. To work around this, we'll create an offscreen
|
||
// document and pass it the data we want to write to the clipboard.
|
||
async function addToClipboard(value) {
|
||
await chrome.offscreen.createDocument({
|
||
url: 'offscreen.html',
|
||
reasons: [chrome.offscreen.Reason.CLIPBOARD],
|
||
justification: 'Write text to the clipboard.'
|
||
});
|
||
|
||
// Now that we have an offscreen document, we can dispatch the
|
||
// message.
|
||
chrome.runtime.sendMessage({
|
||
type: 'copy-data-to-clipboard',
|
||
target: 'offscreen-doc',
|
||
data: value
|
||
});
|
||
}
|
||
|
||
// Solution 2 – Once extension service workers can use the Clipboard API,
|
||
// replace the offscreen document based implementation with something like this.
|
||
async function addToClipboardV2(value) {
|
||
navigator.clipboard.writeText(value);
|
||
}
|