mirror of
https://github.com/electron/electron.git
synced 2026-01-07 22:54:25 -05:00
docs: deprecate clipboard API access from renderer processes (#48877)
This commit is contained in:
committed by
GitHub
parent
7961206fcb
commit
27727dbe0a
@@ -2,10 +2,13 @@
|
|||||||
|
|
||||||
> Perform copy and paste operations on the system clipboard.
|
> Perform copy and paste operations on the system clipboard.
|
||||||
|
|
||||||
Process: [Main](../glossary.md#main-process), [Renderer](../glossary.md#renderer-process) (non-sandboxed only)
|
Process: [Main](../glossary.md#main-process), [Renderer](../glossary.md#renderer-process) _Deprecated_ (non-sandboxed only)
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
> Using the `clipoard` API from the renderer process is deprecated.
|
||||||
|
|
||||||
> [!IMPORTANT]
|
> [!IMPORTANT]
|
||||||
> If you want to call this API from a renderer process with context isolation enabled,
|
> If you want to call this API from a renderer process,
|
||||||
> place the API call in your preload script and
|
> place the API call in your preload script and
|
||||||
> [expose](../tutorial/context-isolation.md#after-context-isolation-enabled) it using the
|
> [expose](../tutorial/context-isolation.md#after-context-isolation-enabled) it using the
|
||||||
> [`contextBridge`](context-bridge.md) API.
|
> [`contextBridge`](context-bridge.md) API.
|
||||||
|
|||||||
@@ -12,6 +12,14 @@ This document uses the following convention to categorize breaking changes:
|
|||||||
* **Deprecated:** An API was marked as deprecated. The API will continue to function, but will emit a deprecation warning, and will be removed in a future release.
|
* **Deprecated:** An API was marked as deprecated. The API will continue to function, but will emit a deprecation warning, and will be removed in a future release.
|
||||||
* **Removed:** An API or feature was removed, and is no longer supported by Electron.
|
* **Removed:** An API or feature was removed, and is no longer supported by Electron.
|
||||||
|
|
||||||
|
## Planned Breaking API Changes (40.0)
|
||||||
|
|
||||||
|
### Deprecated: `clipboard` API access from renderer processes
|
||||||
|
|
||||||
|
Using the `clipboard` API directly in the renderer process is deprecated.
|
||||||
|
If you want to call this API from a renderer process, place the API call in
|
||||||
|
your preload script and expose it using the [contextBridge](https://www.electronjs.org/docs/latest/api/context-bridge) API.
|
||||||
|
|
||||||
## Planned Breaking API Changes (39.0)
|
## Planned Breaking API Changes (39.0)
|
||||||
|
|
||||||
### Deprecated: `--host-rules` command line switch
|
### Deprecated: `--host-rules` command line switch
|
||||||
|
|||||||
@@ -1,21 +1,45 @@
|
|||||||
|
import * as deprecate from '@electron/internal/common/deprecate';
|
||||||
import { IPC_MESSAGES } from '@electron/internal/common/ipc-messages';
|
import { IPC_MESSAGES } from '@electron/internal/common/ipc-messages';
|
||||||
import * as ipcRendererUtils from '@electron/internal/renderer/ipc-renderer-internal-utils';
|
import * as ipcRendererUtils from '@electron/internal/renderer/ipc-renderer-internal-utils';
|
||||||
|
|
||||||
const clipboard = process._linkedBinding('electron_common_clipboard');
|
const clipboard = {} as Electron.Clipboard;
|
||||||
|
const originalClipboard = process._linkedBinding('electron_common_clipboard');
|
||||||
|
|
||||||
|
const warnDeprecatedAccess = function (method: keyof Electron.Clipboard) {
|
||||||
|
return deprecate.warnOnceMessage(`Accessing 'clipboard.${method}' from the renderer process is
|
||||||
|
deprecated and will be removed. Please use the 'contextBridge' API to access
|
||||||
|
the clipboard API from the renderer.`);
|
||||||
|
};
|
||||||
|
|
||||||
|
const makeDeprecatedMethod = function (method: keyof Electron.Clipboard): any {
|
||||||
|
const warnDeprecated = warnDeprecatedAccess(method);
|
||||||
|
return (...args: any[]) => {
|
||||||
|
warnDeprecated();
|
||||||
|
return (originalClipboard[method] as any)(...args);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
const makeRemoteMethod = function (method: keyof Electron.Clipboard): any {
|
const makeRemoteMethod = function (method: keyof Electron.Clipboard): any {
|
||||||
return (...args: any[]) => ipcRendererUtils.invokeSync(IPC_MESSAGES.BROWSER_CLIPBOARD_SYNC, method, ...args);
|
const warnDeprecated = warnDeprecatedAccess(method);
|
||||||
|
return (...args: any[]) => {
|
||||||
|
warnDeprecated();
|
||||||
|
return ipcRendererUtils.invokeSync(IPC_MESSAGES.BROWSER_CLIPBOARD_SYNC, method, ...args);
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
if (process.platform === 'linux') {
|
if (process.platform === 'linux') {
|
||||||
// On Linux we could not access clipboard in renderer process.
|
// On Linux we could not access clipboard in renderer process.
|
||||||
for (const method of Object.keys(clipboard) as (keyof Electron.Clipboard)[]) {
|
for (const method of Object.keys(originalClipboard) as (keyof Electron.Clipboard)[]) {
|
||||||
clipboard[method] = makeRemoteMethod(method);
|
clipboard[method] = makeRemoteMethod(method);
|
||||||
}
|
}
|
||||||
} else if (process.platform === 'darwin') {
|
} else {
|
||||||
// Read/write to find pasteboard over IPC since only main process is notified of changes
|
for (const method of Object.keys(originalClipboard) as (keyof Electron.Clipboard)[]) {
|
||||||
clipboard.readFindText = makeRemoteMethod('readFindText');
|
if (process.platform === 'darwin' && (method === 'readFindText' || method === 'writeFindText')) {
|
||||||
clipboard.writeFindText = makeRemoteMethod('writeFindText');
|
clipboard[method] = makeRemoteMethod(method);
|
||||||
|
} else {
|
||||||
|
clipboard[method] = makeDeprecatedMethod(method);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default clipboard;
|
export default clipboard;
|
||||||
|
|||||||
Reference in New Issue
Block a user