提交 7f55f73e 编写于 作者: M Matt Bierner

Move _ready and postMessage into base class

上级 4f682851
......@@ -5,6 +5,7 @@
import { addClass } from 'vs/base/browser/dom';
import { Disposable, IDisposable } from 'vs/base/common/lifecycle';
import { WebviewOptions } from 'vs/workbench/contrib/webview/browser/webview';
export const enum WebviewMessageChannels {
onmessage = 'onmessage',
......@@ -24,7 +25,7 @@ export abstract class BaseWebview<T extends HTMLElement> extends Disposable {
private _element: T | undefined;
protected get element(): T | undefined { return this._element; }
protected readonly _ready: Promise<void>;
private readonly _ready: Promise<void>;
constructor(options: WebviewOptions) {
super();
......@@ -45,6 +46,7 @@ export abstract class BaseWebview<T extends HTMLElement> extends Disposable {
protected abstract createElement(options: WebviewOptions): T;
protected abstract on<T = unknown>(channel: WebviewMessageChannels, handler: (data: T) => void): IDisposable;
protected abstract postMessage(channel: string, data?: any): void;
dispose(): void {
if (this.element) {
......@@ -54,4 +56,10 @@ export abstract class BaseWebview<T extends HTMLElement> extends Disposable {
this._element = undefined;
super.dispose();
}
protected _send(channel: string, data?: any): void {
this._ready
.then(() => this.postMessage(channel, data))
.catch(err => console.error(err));
}
}
......@@ -119,7 +119,6 @@ export class IFrameWebview extends BaseWebview<HTMLIFrameElement> implements Web
}
private get externalEndpoint(): string {
return 'http://127.0.0.1:8080';
const endpoint = this.environmentService.webviewExternalEndpoint!.replace('{{uuid}}', this.id);
if (endpoint[endpoint.length - 1] === '/') {
return endpoint.slice(0, endpoint.length - 1);
......@@ -236,20 +235,6 @@ export class IFrameWebview extends BaseWebview<HTMLIFrameElement> implements Web
};
}
private _send(channel: string, data: any): void {
this._ready
.then(() => {
if (!this.element) {
return;
}
this.element.contentWindow!.postMessage({
channel: channel,
args: data
}, '*');
})
.catch(err => console.error(err));
}
private style(): void {
const { styles, activeTheme } = this.webviewThemeDataProvider.getWebviewThemeData();
this._send('styles', { styles, activeTheme });
......@@ -286,6 +271,12 @@ export class IFrameWebview extends BaseWebview<HTMLIFrameElement> implements Web
});
}
protected postMessage(channel: string, data?: any): void {
if (this.element) {
this.element.contentWindow!.postMessage({ channel, args: data }, '*');
}
}
protected on<T = unknown>(channel: WebviewMessageChannels, handler: (data: T) => void): IDisposable {
return addDisposableListener(window, 'message', e => {
if (!e || !e.data || e.data.target !== this.id) {
......
......@@ -414,14 +414,10 @@ export class ElectronWebviewBasedWebview extends BaseWebview<WebviewTag> impleme
private readonly _onMissingCsp = this._register(new Emitter<ExtensionIdentifier>());
public readonly onMissingCsp = this._onMissingCsp.event;
private _send(channel: string, data?: any): void {
this._ready
.then(() => {
if (this.element) {
this.element.send(channel, data);
}
})
.catch(err => console.error(err));
protected postMessage(channel: string, data?: any): void {
if (this.element) {
this.element.send(channel, data);
}
}
public set initialScrollProgress(value: number) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册