|
@@ -190,21 +190,27 @@ enum UserAttentionType {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * Get a handle to the current webview window. Allows emitting and listening to events from the backend that are tied to the window.
|
|
|
+ * Get an instance of `WebviewWindow` for the current webview window.
|
|
|
*
|
|
|
- * @return The current window handle.
|
|
|
+ * @return The current WebviewWindow.
|
|
|
*/
|
|
|
-function getCurrent(): WebviewWindowHandle {
|
|
|
- return new WebviewWindowHandle(window.__TAURI__.__currentWindow.label)
|
|
|
+function getCurrent(): WebviewWindow {
|
|
|
+ // @ts-expect-error
|
|
|
+ return new WebviewWindow(window.__TAURI__.__currentWindow.label, {
|
|
|
+ skip: true
|
|
|
+ })
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * Gets metadata for all available webview windows.
|
|
|
+ * Gets an instance of `WebviewWindow` for all available webview windows.
|
|
|
*
|
|
|
- * @return The list of webview handles.
|
|
|
+ * @return The list of WebviewWindow.
|
|
|
*/
|
|
|
-function getAll(): WindowDef[] {
|
|
|
- return window.__TAURI__.__windows
|
|
|
+function getAll(): WebviewWindow[] {
|
|
|
+ // @ts-expect-error
|
|
|
+ return window.__TAURI__.__windows.map(
|
|
|
+ (w) => new WebviewWindow(w, { skip: true })
|
|
|
+ )
|
|
|
}
|
|
|
|
|
|
/** @ignore */
|
|
@@ -297,66 +303,6 @@ class WebviewWindowHandle {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * Create new webview windows and get a handle to existing ones.
|
|
|
- * @example
|
|
|
- * ```typescript
|
|
|
- * // loading embedded asset:
|
|
|
- * const webview = new WebviewWindow('theUniqueLabel', {
|
|
|
- * url: 'path/to/page.html'
|
|
|
- * })
|
|
|
- * // alternatively, load a remote URL:
|
|
|
- * const webview = new WebviewWindow('theUniqueLabel', {
|
|
|
- * url: 'https://github.com/tauri-apps/tauri'
|
|
|
- * })
|
|
|
- *
|
|
|
- * webview.once('tauri://created', function () {
|
|
|
- * // webview window successfully created
|
|
|
- * })
|
|
|
- * webview.once('tauri://error', function (e) {
|
|
|
- * // an error happened creating the webview window
|
|
|
- * })
|
|
|
- *
|
|
|
- * // emit an event to the backend
|
|
|
- * await webview.emit("some event", "data")
|
|
|
- * // listen to an event from the backend
|
|
|
- * const unlisten = await webview.listen("event name", e => {})
|
|
|
- * unlisten()
|
|
|
- * ```
|
|
|
- */
|
|
|
-class WebviewWindow extends WebviewWindowHandle {
|
|
|
- constructor(label: string, options: WindowOptions = {}) {
|
|
|
- super(label)
|
|
|
- invokeTauriCommand({
|
|
|
- __tauriModule: 'Window',
|
|
|
- message: {
|
|
|
- cmd: 'createWebview',
|
|
|
- data: {
|
|
|
- options: {
|
|
|
- label,
|
|
|
- ...options
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- })
|
|
|
- .then(async () => this.emit('tauri://created'))
|
|
|
- .catch(async (e) => this.emit('tauri://error', e))
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * Gets the WebviewWindow handle for the webview associated with the given label.
|
|
|
- *
|
|
|
- * @param label The webview window label.
|
|
|
- * @returns The handle to communicate with the webview or null if the webview doesn't exist.
|
|
|
- */
|
|
|
- static getByLabel(label: string): WebviewWindowHandle | null {
|
|
|
- if (getAll().some((w) => w.label === label)) {
|
|
|
- return new WebviewWindowHandle(label)
|
|
|
- }
|
|
|
- return null
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
/**
|
|
|
* Manage the current window object.
|
|
|
*/
|
|
@@ -367,7 +313,13 @@ class WindowManager extends WebviewWindowHandle {
|
|
|
return invokeTauriCommand({
|
|
|
__tauriModule: 'Window',
|
|
|
message: {
|
|
|
- cmd: 'scaleFactor'
|
|
|
+ cmd: 'manage',
|
|
|
+ data: {
|
|
|
+ label: this.label,
|
|
|
+ cmd: {
|
|
|
+ type: 'scaleFactor'
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
})
|
|
|
}
|
|
@@ -377,7 +329,13 @@ class WindowManager extends WebviewWindowHandle {
|
|
|
return invokeTauriCommand({
|
|
|
__tauriModule: 'Window',
|
|
|
message: {
|
|
|
- cmd: 'innerPosition'
|
|
|
+ cmd: 'manage',
|
|
|
+ data: {
|
|
|
+ label: this.label,
|
|
|
+ cmd: {
|
|
|
+ type: 'innerPosition'
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
})
|
|
|
}
|
|
@@ -387,7 +345,13 @@ class WindowManager extends WebviewWindowHandle {
|
|
|
return invokeTauriCommand({
|
|
|
__tauriModule: 'Window',
|
|
|
message: {
|
|
|
- cmd: 'outerPosition'
|
|
|
+ cmd: 'manage',
|
|
|
+ data: {
|
|
|
+ label: this.label,
|
|
|
+ cmd: {
|
|
|
+ type: 'outerPosition'
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
})
|
|
|
}
|
|
@@ -400,7 +364,13 @@ class WindowManager extends WebviewWindowHandle {
|
|
|
return invokeTauriCommand({
|
|
|
__tauriModule: 'Window',
|
|
|
message: {
|
|
|
- cmd: 'innerSize'
|
|
|
+ cmd: 'manage',
|
|
|
+ data: {
|
|
|
+ label: this.label,
|
|
|
+ cmd: {
|
|
|
+ type: 'innerSize'
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
})
|
|
|
}
|
|
@@ -413,7 +383,13 @@ class WindowManager extends WebviewWindowHandle {
|
|
|
return invokeTauriCommand({
|
|
|
__tauriModule: 'Window',
|
|
|
message: {
|
|
|
- cmd: 'outerSize'
|
|
|
+ cmd: 'manage',
|
|
|
+ data: {
|
|
|
+ label: this.label,
|
|
|
+ cmd: {
|
|
|
+ type: 'outerSize'
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
})
|
|
|
}
|
|
@@ -423,7 +399,13 @@ class WindowManager extends WebviewWindowHandle {
|
|
|
return invokeTauriCommand({
|
|
|
__tauriModule: 'Window',
|
|
|
message: {
|
|
|
- cmd: 'isFullscreen'
|
|
|
+ cmd: 'manage',
|
|
|
+ data: {
|
|
|
+ label: this.label,
|
|
|
+ cmd: {
|
|
|
+ type: 'isFullscreen'
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
})
|
|
|
}
|
|
@@ -433,7 +415,13 @@ class WindowManager extends WebviewWindowHandle {
|
|
|
return invokeTauriCommand({
|
|
|
__tauriModule: 'Window',
|
|
|
message: {
|
|
|
- cmd: 'isMaximized'
|
|
|
+ cmd: 'manage',
|
|
|
+ data: {
|
|
|
+ label: this.label,
|
|
|
+ cmd: {
|
|
|
+ type: 'isMaximized'
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
})
|
|
|
}
|
|
@@ -443,7 +431,13 @@ class WindowManager extends WebviewWindowHandle {
|
|
|
return invokeTauriCommand({
|
|
|
__tauriModule: 'Window',
|
|
|
message: {
|
|
|
- cmd: 'isDecorated'
|
|
|
+ cmd: 'manage',
|
|
|
+ data: {
|
|
|
+ label: this.label,
|
|
|
+ cmd: {
|
|
|
+ type: 'isDecorated'
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
})
|
|
|
}
|
|
@@ -453,7 +447,13 @@ class WindowManager extends WebviewWindowHandle {
|
|
|
return invokeTauriCommand({
|
|
|
__tauriModule: 'Window',
|
|
|
message: {
|
|
|
- cmd: 'isResizable'
|
|
|
+ cmd: 'manage',
|
|
|
+ data: {
|
|
|
+ label: this.label,
|
|
|
+ cmd: {
|
|
|
+ type: 'isResizable'
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
})
|
|
|
}
|
|
@@ -463,7 +463,13 @@ class WindowManager extends WebviewWindowHandle {
|
|
|
return invokeTauriCommand({
|
|
|
__tauriModule: 'Window',
|
|
|
message: {
|
|
|
- cmd: 'isVisible'
|
|
|
+ cmd: 'manage',
|
|
|
+ data: {
|
|
|
+ label: this.label,
|
|
|
+ cmd: {
|
|
|
+ type: 'isVisible'
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
})
|
|
|
}
|
|
@@ -480,7 +486,13 @@ class WindowManager extends WebviewWindowHandle {
|
|
|
return invokeTauriCommand({
|
|
|
__tauriModule: 'Window',
|
|
|
message: {
|
|
|
- cmd: 'center'
|
|
|
+ cmd: 'manage',
|
|
|
+ data: {
|
|
|
+ label: this.label,
|
|
|
+ cmd: {
|
|
|
+ type: 'center'
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
})
|
|
|
}
|
|
@@ -514,8 +526,14 @@ class WindowManager extends WebviewWindowHandle {
|
|
|
return invokeTauriCommand({
|
|
|
__tauriModule: 'Window',
|
|
|
message: {
|
|
|
- cmd: 'requestUserAttention',
|
|
|
- data: requestType_
|
|
|
+ cmd: 'manage',
|
|
|
+ data: {
|
|
|
+ label: this.label,
|
|
|
+ cmd: {
|
|
|
+ type: 'requestUserAttention',
|
|
|
+ payload: requestType_
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
})
|
|
|
}
|
|
@@ -530,8 +548,14 @@ class WindowManager extends WebviewWindowHandle {
|
|
|
return invokeTauriCommand({
|
|
|
__tauriModule: 'Window',
|
|
|
message: {
|
|
|
- cmd: 'setResizable',
|
|
|
- data: resizable
|
|
|
+ cmd: 'manage',
|
|
|
+ data: {
|
|
|
+ label: this.label,
|
|
|
+ cmd: {
|
|
|
+ type: 'setResizable',
|
|
|
+ payload: resizable
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
})
|
|
|
}
|
|
@@ -546,8 +570,14 @@ class WindowManager extends WebviewWindowHandle {
|
|
|
return invokeTauriCommand({
|
|
|
__tauriModule: 'Window',
|
|
|
message: {
|
|
|
- cmd: 'setTitle',
|
|
|
- data: title
|
|
|
+ cmd: 'manage',
|
|
|
+ data: {
|
|
|
+ label: this.label,
|
|
|
+ cmd: {
|
|
|
+ type: 'setTitle',
|
|
|
+ payload: title
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
})
|
|
|
}
|
|
@@ -561,7 +591,13 @@ class WindowManager extends WebviewWindowHandle {
|
|
|
return invokeTauriCommand({
|
|
|
__tauriModule: 'Window',
|
|
|
message: {
|
|
|
- cmd: 'maximize'
|
|
|
+ cmd: 'manage',
|
|
|
+ data: {
|
|
|
+ label: this.label,
|
|
|
+ cmd: {
|
|
|
+ type: 'maximize'
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
})
|
|
|
}
|
|
@@ -575,7 +611,13 @@ class WindowManager extends WebviewWindowHandle {
|
|
|
return invokeTauriCommand({
|
|
|
__tauriModule: 'Window',
|
|
|
message: {
|
|
|
- cmd: 'unmaximize'
|
|
|
+ cmd: 'manage',
|
|
|
+ data: {
|
|
|
+ label: this.label,
|
|
|
+ cmd: {
|
|
|
+ type: 'unmaximize'
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
})
|
|
|
}
|
|
@@ -589,7 +631,13 @@ class WindowManager extends WebviewWindowHandle {
|
|
|
return invokeTauriCommand({
|
|
|
__tauriModule: 'Window',
|
|
|
message: {
|
|
|
- cmd: 'minimize'
|
|
|
+ cmd: 'manage',
|
|
|
+ data: {
|
|
|
+ label: this.label,
|
|
|
+ cmd: {
|
|
|
+ type: 'minimize'
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
})
|
|
|
}
|
|
@@ -603,7 +651,13 @@ class WindowManager extends WebviewWindowHandle {
|
|
|
return invokeTauriCommand({
|
|
|
__tauriModule: 'Window',
|
|
|
message: {
|
|
|
- cmd: 'unminimize'
|
|
|
+ cmd: 'manage',
|
|
|
+ data: {
|
|
|
+ label: this.label,
|
|
|
+ cmd: {
|
|
|
+ type: 'unminimize'
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
})
|
|
|
}
|
|
@@ -617,7 +671,13 @@ class WindowManager extends WebviewWindowHandle {
|
|
|
return invokeTauriCommand({
|
|
|
__tauriModule: 'Window',
|
|
|
message: {
|
|
|
- cmd: 'show'
|
|
|
+ cmd: 'manage',
|
|
|
+ data: {
|
|
|
+ label: this.label,
|
|
|
+ cmd: {
|
|
|
+ type: 'show'
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
})
|
|
|
}
|
|
@@ -631,7 +691,13 @@ class WindowManager extends WebviewWindowHandle {
|
|
|
return invokeTauriCommand({
|
|
|
__tauriModule: 'Window',
|
|
|
message: {
|
|
|
- cmd: 'hide'
|
|
|
+ cmd: 'manage',
|
|
|
+ data: {
|
|
|
+ label: this.label,
|
|
|
+ cmd: {
|
|
|
+ type: 'hide'
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
})
|
|
|
}
|
|
@@ -645,7 +711,13 @@ class WindowManager extends WebviewWindowHandle {
|
|
|
return invokeTauriCommand({
|
|
|
__tauriModule: 'Window',
|
|
|
message: {
|
|
|
- cmd: 'close'
|
|
|
+ cmd: 'manage',
|
|
|
+ data: {
|
|
|
+ label: this.label,
|
|
|
+ cmd: {
|
|
|
+ type: 'close'
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
})
|
|
|
}
|
|
@@ -660,8 +732,14 @@ class WindowManager extends WebviewWindowHandle {
|
|
|
return invokeTauriCommand({
|
|
|
__tauriModule: 'Window',
|
|
|
message: {
|
|
|
- cmd: 'setDecorations',
|
|
|
- data: decorations
|
|
|
+ cmd: 'manage',
|
|
|
+ data: {
|
|
|
+ label: this.label,
|
|
|
+ cmd: {
|
|
|
+ type: 'setDecorations',
|
|
|
+ payload: decorations
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
})
|
|
|
}
|
|
@@ -676,8 +754,14 @@ class WindowManager extends WebviewWindowHandle {
|
|
|
return invokeTauriCommand({
|
|
|
__tauriModule: 'Window',
|
|
|
message: {
|
|
|
- cmd: 'setAlwaysOnTop',
|
|
|
- data: alwaysOnTop
|
|
|
+ cmd: 'manage',
|
|
|
+ data: {
|
|
|
+ label: this.label,
|
|
|
+ cmd: {
|
|
|
+ type: 'setAlwaysOnTop',
|
|
|
+ payload: alwaysOnTop
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
})
|
|
|
}
|
|
@@ -702,12 +786,18 @@ class WindowManager extends WebviewWindowHandle {
|
|
|
return invokeTauriCommand({
|
|
|
__tauriModule: 'Window',
|
|
|
message: {
|
|
|
- cmd: 'setSize',
|
|
|
+ cmd: 'manage',
|
|
|
data: {
|
|
|
- type: size.type,
|
|
|
- data: {
|
|
|
- width: size.width,
|
|
|
- height: size.height
|
|
|
+ label: this.label,
|
|
|
+ cmd: {
|
|
|
+ type: 'setSize',
|
|
|
+ payload: {
|
|
|
+ type: size.type,
|
|
|
+ data: {
|
|
|
+ width: size.width,
|
|
|
+ height: size.height
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -736,16 +826,22 @@ class WindowManager extends WebviewWindowHandle {
|
|
|
return invokeTauriCommand({
|
|
|
__tauriModule: 'Window',
|
|
|
message: {
|
|
|
- cmd: 'setMinSize',
|
|
|
- data: size
|
|
|
- ? {
|
|
|
- type: size.type,
|
|
|
- data: {
|
|
|
- width: size.width,
|
|
|
- height: size.height
|
|
|
- }
|
|
|
- }
|
|
|
- : null
|
|
|
+ cmd: 'manage',
|
|
|
+ data: {
|
|
|
+ label: this.label,
|
|
|
+ cmd: {
|
|
|
+ type: 'setMinSize',
|
|
|
+ payload: size
|
|
|
+ ? {
|
|
|
+ type: size.type,
|
|
|
+ data: {
|
|
|
+ width: size.width,
|
|
|
+ height: size.height
|
|
|
+ }
|
|
|
+ }
|
|
|
+ : null
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
})
|
|
|
}
|
|
@@ -772,16 +868,22 @@ class WindowManager extends WebviewWindowHandle {
|
|
|
return invokeTauriCommand({
|
|
|
__tauriModule: 'Window',
|
|
|
message: {
|
|
|
- cmd: 'setMaxSize',
|
|
|
- data: size
|
|
|
- ? {
|
|
|
- type: size.type,
|
|
|
- data: {
|
|
|
- width: size.width,
|
|
|
- height: size.height
|
|
|
- }
|
|
|
- }
|
|
|
- : null
|
|
|
+ cmd: 'manage',
|
|
|
+ data: {
|
|
|
+ label: this.label,
|
|
|
+ cmd: {
|
|
|
+ type: 'setMaxSize',
|
|
|
+ payload: size
|
|
|
+ ? {
|
|
|
+ type: size.type,
|
|
|
+ data: {
|
|
|
+ width: size.width,
|
|
|
+ height: size.height
|
|
|
+ }
|
|
|
+ }
|
|
|
+ : null
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
})
|
|
|
}
|
|
@@ -811,12 +913,18 @@ class WindowManager extends WebviewWindowHandle {
|
|
|
return invokeTauriCommand({
|
|
|
__tauriModule: 'Window',
|
|
|
message: {
|
|
|
- cmd: 'setPosition',
|
|
|
+ cmd: 'manage',
|
|
|
data: {
|
|
|
- type: position.type,
|
|
|
- data: {
|
|
|
- x: position.x,
|
|
|
- y: position.y
|
|
|
+ label: this.label,
|
|
|
+ cmd: {
|
|
|
+ type: 'setPosition',
|
|
|
+ payload: {
|
|
|
+ type: position.type,
|
|
|
+ data: {
|
|
|
+ x: position.x,
|
|
|
+ y: position.y
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -833,8 +941,14 @@ class WindowManager extends WebviewWindowHandle {
|
|
|
return invokeTauriCommand({
|
|
|
__tauriModule: 'Window',
|
|
|
message: {
|
|
|
- cmd: 'setFullscreen',
|
|
|
- data: fullscreen
|
|
|
+ cmd: 'manage',
|
|
|
+ data: {
|
|
|
+ label: this.label,
|
|
|
+ cmd: {
|
|
|
+ type: 'setFullscreen',
|
|
|
+ payload: fullscreen
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
})
|
|
|
}
|
|
@@ -848,7 +962,13 @@ class WindowManager extends WebviewWindowHandle {
|
|
|
return invokeTauriCommand({
|
|
|
__tauriModule: 'Window',
|
|
|
message: {
|
|
|
- cmd: 'setFocus'
|
|
|
+ cmd: 'manage',
|
|
|
+ data: {
|
|
|
+ label: this.label,
|
|
|
+ cmd: {
|
|
|
+ type: 'setFocus'
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
})
|
|
|
}
|
|
@@ -863,9 +983,15 @@ class WindowManager extends WebviewWindowHandle {
|
|
|
return invokeTauriCommand({
|
|
|
__tauriModule: 'Window',
|
|
|
message: {
|
|
|
- cmd: 'setIcon',
|
|
|
+ cmd: 'manage',
|
|
|
data: {
|
|
|
- icon
|
|
|
+ label: this.label,
|
|
|
+ cmd: {
|
|
|
+ type: 'setIcon',
|
|
|
+ payload: {
|
|
|
+ icon
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
})
|
|
@@ -881,8 +1007,14 @@ class WindowManager extends WebviewWindowHandle {
|
|
|
return invokeTauriCommand({
|
|
|
__tauriModule: 'Window',
|
|
|
message: {
|
|
|
- cmd: 'setSkipTaskbar',
|
|
|
- data: skip
|
|
|
+ cmd: 'manage',
|
|
|
+ data: {
|
|
|
+ label: this.label,
|
|
|
+ cmd: {
|
|
|
+ type: 'setSkipTaskbar',
|
|
|
+ payload: skip
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
})
|
|
|
}
|
|
@@ -896,14 +1028,85 @@ class WindowManager extends WebviewWindowHandle {
|
|
|
return invokeTauriCommand({
|
|
|
__tauriModule: 'Window',
|
|
|
message: {
|
|
|
- cmd: 'startDragging'
|
|
|
+ cmd: 'manage',
|
|
|
+ data: {
|
|
|
+ label: this.label,
|
|
|
+ cmd: {
|
|
|
+ type: 'startDragging'
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
})
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-/** The manager for the current window. Allows you to manipulate the window object, listen and emit events. */
|
|
|
-const appWindow = new WindowManager(window.__TAURI__.__currentWindow.label)
|
|
|
+/**
|
|
|
+ * Create new webview windows and get a handle to existing ones.
|
|
|
+ * @example
|
|
|
+ * ```typescript
|
|
|
+ * // loading embedded asset:
|
|
|
+ * const webview = new WebviewWindow('theUniqueLabel', {
|
|
|
+ * url: 'path/to/page.html'
|
|
|
+ * })
|
|
|
+ * // alternatively, load a remote URL:
|
|
|
+ * const webview = new WebviewWindow('theUniqueLabel', {
|
|
|
+ * url: 'https://github.com/tauri-apps/tauri'
|
|
|
+ * })
|
|
|
+ *
|
|
|
+ * webview.once('tauri://created', function () {
|
|
|
+ * // webview window successfully created
|
|
|
+ * })
|
|
|
+ * webview.once('tauri://error', function (e) {
|
|
|
+ * // an error happened creating the webview window
|
|
|
+ * })
|
|
|
+ *
|
|
|
+ * // emit an event to the backend
|
|
|
+ * await webview.emit("some event", "data")
|
|
|
+ * // listen to an event from the backend
|
|
|
+ * const unlisten = await webview.listen("event name", e => {})
|
|
|
+ * unlisten()
|
|
|
+ * ```
|
|
|
+ */
|
|
|
+class WebviewWindow extends WindowManager {
|
|
|
+ constructor(label: string, options: WindowOptions = {}) {
|
|
|
+ super(label)
|
|
|
+ // @ts-expect-error
|
|
|
+ if (!options?.skip) {
|
|
|
+ invokeTauriCommand({
|
|
|
+ __tauriModule: 'Window',
|
|
|
+ message: {
|
|
|
+ cmd: 'createWebview',
|
|
|
+ data: {
|
|
|
+ options: {
|
|
|
+ label,
|
|
|
+ ...options
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .then(async () => this.emit('tauri://created'))
|
|
|
+ .catch(async (e) => this.emit('tauri://error', e))
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Gets the WebviewWindow for the webview associated with the given label.
|
|
|
+ *
|
|
|
+ * @param label The webview window label.
|
|
|
+ * @returns The WebviewWindow instance to communicate with the webview or null if the webview doesn't exist.
|
|
|
+ */
|
|
|
+ static getByLabel(label: string): WebviewWindow | null {
|
|
|
+ if (getAll().some((w) => w.label === label)) {
|
|
|
+ // @ts-expect-error
|
|
|
+ return new WebviewWindow(label, { skip: true })
|
|
|
+ }
|
|
|
+ return null
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/** The WebviewWindow for the current window. */
|
|
|
+// @ts-expect-error
|
|
|
+const appWindow = new WebviewWindow()
|
|
|
|
|
|
/** Configuration for the window to create. */
|
|
|
interface WindowOptions {
|