@opensumi/ide-webview 3.4.5-next-1730102270.0 → 3.4.5-next-1730118482.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/browser/abstract-webview.js +2 -2
- package/lib/browser/abstract-webview.js.map +1 -1
- package/lib/browser/contribution.js +2 -2
- package/lib/browser/contribution.js.map +1 -1
- package/lib/browser/editor-webview.js.map +1 -1
- package/lib/browser/electron-webview-webview.js +2 -2
- package/lib/browser/electron-webview-webview.js.map +1 -1
- package/lib/browser/electron.contribution.js +2 -2
- package/lib/browser/electron.contribution.js.map +1 -1
- package/lib/browser/iframe/prebuilt.d.ts +2 -0
- package/lib/browser/iframe/prebuilt.d.ts.map +1 -0
- package/lib/browser/iframe/prebuilt.js +12 -0
- package/lib/browser/iframe/prebuilt.js.map +1 -0
- package/lib/browser/iframe-webview.d.ts.map +1 -1
- package/lib/browser/iframe-webview.js +11 -3
- package/lib/browser/iframe-webview.js.map +1 -1
- package/lib/browser/index.js +2 -2
- package/lib/browser/index.js.map +1 -1
- package/lib/browser/plain-webview.js.map +1 -1
- package/lib/browser/types.js +2 -2
- package/lib/browser/types.js.map +1 -1
- package/lib/browser/webview-window.js +11 -4
- package/lib/browser/webview-window.js.map +1 -1
- package/lib/browser/webview.service.d.ts.map +1 -1
- package/lib/browser/webview.service.js +17 -9
- package/lib/browser/webview.service.js.map +1 -1
- package/lib/electron-main/index.js +4 -4
- package/lib/electron-main/index.js.map +1 -1
- package/lib/electron-webview/host-channel.d.ts +1 -0
- package/lib/electron-webview/host-channel.d.ts.map +1 -1
- package/lib/electron-webview/host-channel.js +4 -0
- package/lib/electron-webview/host-channel.js.map +1 -1
- package/lib/webview-host/common.d.ts +1 -0
- package/lib/webview-host/common.d.ts.map +1 -1
- package/lib/webview-host/common.js +2 -2
- package/lib/webview-host/common.js.map +1 -1
- package/lib/webview-host/web-iframe-channel.d.ts +19 -0
- package/lib/webview-host/web-iframe-channel.d.ts.map +1 -0
- package/lib/webview-host/web-iframe-channel.js +83 -0
- package/lib/webview-host/web-iframe-channel.js.map +1 -0
- package/lib/webview-host/web-preload-builtin.d.ts +2 -0
- package/lib/webview-host/web-preload-builtin.d.ts.map +1 -0
- package/lib/webview-host/web-preload-builtin.js +7 -0
- package/lib/webview-host/web-preload-builtin.js.map +1 -0
- package/lib/webview-host/web-preload.d.ts +1 -15
- package/lib/webview-host/web-preload.d.ts.map +1 -1
- package/lib/webview-host/web-preload.js +3 -63
- package/lib/webview-host/web-preload.js.map +1 -1
- package/lib/webview-host/webview-manager.d.ts +1 -1
- package/lib/webview-host/webview-manager.d.ts.map +1 -1
- package/lib/webview-host/webview-manager.js +3 -2
- package/lib/webview-host/webview-manager.js.map +1 -1
- package/package.json +10 -9
- package/src/browser/iframe/prebuilt.ts +8 -0
- package/src/browser/iframe-webview.ts +11 -1
- package/src/browser/webview.service.ts +1 -1
- package/src/electron-webview/host-channel.ts +5 -0
- package/src/webview-host/common.ts +1 -0
- package/src/webview-host/web-iframe-channel.ts +90 -0
- package/src/webview-host/web-preload-builtin.ts +9 -0
- package/src/webview-host/web-preload.ts +2 -73
- package/src/webview-host/webview-manager.ts +4 -3
|
@@ -243,7 +243,7 @@ export class WebviewServiceImpl implements IWebviewService {
|
|
|
243
243
|
|
|
244
244
|
getWebviewThemeData(theme: ITheme): IWebviewThemeData {
|
|
245
245
|
const editorFontFamily = this.editorPreferences['editor.fontFamily'];
|
|
246
|
-
const editorFontWeight = this.editorPreferences['editor.
|
|
246
|
+
const editorFontWeight = this.editorPreferences['editor.fontWeight'];
|
|
247
247
|
const editorFontSize = this.editorPreferences['editor.fontSize'];
|
|
248
248
|
|
|
249
249
|
const exportedColors = getColorRegistry()
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ipcRenderer } from 'electron';
|
|
2
2
|
|
|
3
3
|
import { IWebviewChannel } from '../webview-host/common';
|
|
4
|
+
import { getIdFromSearch } from '../webview-host/web-iframe-channel';
|
|
4
5
|
import { WebviewPanelManager } from '../webview-host/webview-manager';
|
|
5
6
|
|
|
6
7
|
export class ElectronWebviewChannel implements IWebviewChannel {
|
|
@@ -11,6 +12,10 @@ export class ElectronWebviewChannel implements IWebviewChannel {
|
|
|
11
12
|
|
|
12
13
|
public isInDevelopmentMode = false;
|
|
13
14
|
|
|
15
|
+
get id() {
|
|
16
|
+
return getIdFromSearch();
|
|
17
|
+
}
|
|
18
|
+
|
|
14
19
|
constructor() {
|
|
15
20
|
window.addEventListener('message', (e) => {
|
|
16
21
|
if (e.data && (e.data.command === 'onmessage' || e.data.command === 'do-update-state')) {
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/* istanbul ignore file */
|
|
2
|
+
import { IWebviewChannel } from './common';
|
|
3
|
+
|
|
4
|
+
export const getIdFromSearch = () => {
|
|
5
|
+
const params = new URLSearchParams(document.location.search);
|
|
6
|
+
const id = params.get('id');
|
|
7
|
+
if (id) {
|
|
8
|
+
return id;
|
|
9
|
+
} else {
|
|
10
|
+
throw new Error('Missing "id" parameter in URL');
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export class WebIframeChannel implements IWebviewChannel {
|
|
15
|
+
private handlers = new Map();
|
|
16
|
+
focusIframeOnCreate?: boolean;
|
|
17
|
+
ready?: Promise<void>;
|
|
18
|
+
fakeLoad = false;
|
|
19
|
+
private isInDevelopmentMode = false;
|
|
20
|
+
|
|
21
|
+
private _id: string;
|
|
22
|
+
get id() {
|
|
23
|
+
if (!this._id) {
|
|
24
|
+
this._id = this.getId() ?? '';
|
|
25
|
+
}
|
|
26
|
+
return this._id;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
constructor(protected getId: () => string) {
|
|
30
|
+
window.addEventListener('message', (e) => {
|
|
31
|
+
if (e.data && (e.data.command === 'onmessage' || e.data.command === 'do-update-state')) {
|
|
32
|
+
// Came from inner iframe
|
|
33
|
+
this.postMessage(e.data.command, e.data.data);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const channel = e.data.channel;
|
|
38
|
+
const handler = this.handlers.get(channel);
|
|
39
|
+
if (handler) {
|
|
40
|
+
handler(e, e.data.data);
|
|
41
|
+
} else {
|
|
42
|
+
// eslint-disable-next-line no-console
|
|
43
|
+
console.log('no handler for ', e);
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
this.ready = new Promise<void>((resolve) => {
|
|
48
|
+
// TODO 等待service worker完成 未来资源使用service worker时需要加入
|
|
49
|
+
resolve();
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
this.onMessage('devtools-opened', () => {
|
|
53
|
+
this.isInDevelopmentMode = true;
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
get inDev() {
|
|
58
|
+
return this.isInDevelopmentMode;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
postMessage(channel, data?) {
|
|
62
|
+
if (window.parent !== window) {
|
|
63
|
+
window.parent.postMessage({ target: this.id, channel, data }, '*');
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
onMessage(channel, handler) {
|
|
68
|
+
this.handlers.set(channel, handler);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
onIframeLoaded(newFrame) {
|
|
72
|
+
// newFrame.contentWindow.onbeforeunload = () => {
|
|
73
|
+
// if (this.isInDevelopmentMode) { // Allow reloads while developing a webview
|
|
74
|
+
// this.postMessage('do-reload');
|
|
75
|
+
// return false;
|
|
76
|
+
// }
|
|
77
|
+
// // Block navigation when not in development mode
|
|
78
|
+
// console.log('prevented webview navigation');
|
|
79
|
+
// return false;
|
|
80
|
+
// };
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
onKeydown(event: KeyboardEvent) {
|
|
84
|
+
// 在浏览器上,需要阻止一些默认的keydown快捷键
|
|
85
|
+
if (event.key === 's' && (event.metaKey || event.ctrlKey)) {
|
|
86
|
+
// 阻止保存
|
|
87
|
+
event.preventDefault();
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/* istanbul ignore file */
|
|
2
|
+
import { WebIframeChannel } from './web-iframe-channel';
|
|
3
|
+
import { WebviewPanelManager } from './webview-manager';
|
|
4
|
+
|
|
5
|
+
interface ExtendedWindow extends Window {
|
|
6
|
+
channelId: string;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
new WebviewPanelManager(new WebIframeChannel(() => (window as unknown as ExtendedWindow).channelId));
|
|
@@ -1,76 +1,5 @@
|
|
|
1
1
|
/* istanbul ignore file */
|
|
2
|
-
import {
|
|
2
|
+
import { WebIframeChannel, getIdFromSearch } from './web-iframe-channel';
|
|
3
3
|
import { WebviewPanelManager } from './webview-manager';
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
private handlers = new Map();
|
|
7
|
-
focusIframeOnCreate?: boolean | undefined;
|
|
8
|
-
ready?: Promise<void> | undefined;
|
|
9
|
-
fakeLoad = false;
|
|
10
|
-
private isInDevelopmentMode = false;
|
|
11
|
-
private id = document!.location!.search!.match(/\bid=([\w-]+)/)![1];
|
|
12
|
-
|
|
13
|
-
constructor() {
|
|
14
|
-
window.addEventListener('message', (e) => {
|
|
15
|
-
if (e.data && (e.data.command === 'onmessage' || e.data.command === 'do-update-state')) {
|
|
16
|
-
// Came from inner iframe
|
|
17
|
-
this.postMessage(e.data.command, e.data.data);
|
|
18
|
-
return;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
const channel = e.data.channel;
|
|
22
|
-
const handler = this.handlers.get(channel);
|
|
23
|
-
if (handler) {
|
|
24
|
-
handler(e, e.data.data);
|
|
25
|
-
} else {
|
|
26
|
-
// eslint-disable-next-line no-console
|
|
27
|
-
console.log('no handler for ', e);
|
|
28
|
-
}
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
this.ready = new Promise<void>(async (resolve) => {
|
|
32
|
-
// TODO 等待service worker完成 未来资源使用service worker时需要加入
|
|
33
|
-
resolve();
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
this.onMessage('devtools-opened', () => {
|
|
37
|
-
this.isInDevelopmentMode = true;
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
get inDev() {
|
|
42
|
-
return this.isInDevelopmentMode;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
postMessage(channel, data?) {
|
|
46
|
-
if (window.parent !== window) {
|
|
47
|
-
window.parent.postMessage({ target: this.id, channel, data }, '*');
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
onMessage(channel, handler) {
|
|
52
|
-
this.handlers.set(channel, handler);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
onIframeLoaded(newFrame) {
|
|
56
|
-
// newFrame.contentWindow.onbeforeunload = () => {
|
|
57
|
-
// if (this.isInDevelopmentMode) { // Allow reloads while developing a webview
|
|
58
|
-
// this.postMessage('do-reload');
|
|
59
|
-
// return false;
|
|
60
|
-
// }
|
|
61
|
-
// // Block navigation when not in development mode
|
|
62
|
-
// console.log('prevented webview navigation');
|
|
63
|
-
// return false;
|
|
64
|
-
// };
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
onKeydown(event: KeyboardEvent) {
|
|
68
|
-
// 在浏览器上,需要阻止一些默认的keydown快捷键
|
|
69
|
-
if (event.key === 's' && (event.metaKey || event.ctrlKey)) {
|
|
70
|
-
// 阻止保存
|
|
71
|
-
event.preventDefault();
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
new WebviewPanelManager(new WebIframeChannel());
|
|
5
|
+
new WebviewPanelManager(new WebIframeChannel(getIdFromSearch));
|
|
@@ -9,15 +9,16 @@ export class WebviewPanelManager {
|
|
|
9
9
|
private loadTimeout;
|
|
10
10
|
private pendingMessages: any[] = [];
|
|
11
11
|
private initialScrollProgress: number;
|
|
12
|
-
|
|
12
|
+
|
|
13
|
+
get ID() {
|
|
14
|
+
return this.channel.id;
|
|
15
|
+
}
|
|
13
16
|
|
|
14
17
|
constructor(private channel: IWebviewChannel) {
|
|
15
18
|
document.addEventListener('DOMContentLoaded', this.init.bind(this));
|
|
16
19
|
}
|
|
17
20
|
|
|
18
21
|
private init() {
|
|
19
|
-
const idMatch = document.location.search.match(/\bid=([\w-]+)/);
|
|
20
|
-
this.ID = idMatch ? idMatch[1] : undefined;
|
|
21
22
|
if (!document.body) {
|
|
22
23
|
return;
|
|
23
24
|
}
|