@gjsify/iframe 0.4.14 → 0.4.15
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/esm/iframe-bridge.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./_virtual/_rolldown/runtime.js";import{iframeWidget as e,windowProxy as t}from"./property-symbol.js";import{HTMLIFrameElement as n}from"./html-iframe-element.js";import{IFrameWindowProxy as r}from"./iframe-window-proxy.js";import{MessageBridge as i}from"./message-bridge.js";import a from"gi://GObject";import o from"gi://WebKit?version=6.0";const s=a.registerClass({GTypeName:`GjsifyIFrameBridge`},class IFrameBridge extends o.WebView{constructor(a){let{enableDeveloperExtras:s,enableJavascript:c,...l}=a??{},u=new o.UserContentManager,d=new o.Settings;d.enable_javascript=c??!0,d.enable_developer_extras=s??!0,super({...l,user_content_manager:u,settings:d}),this._readyCallbacks=[],this._options={enableDeveloperExtras:s,enableJavascript:c},this._iframe=new n,this._iframe[e]=this,this._messageBridge=new i(this);let f=new r(this._messageBridge);this._iframe[t]=f,this._messageBridge.setWindowProxy(f),this.connect(`load-changed`,(e,t)=>{switch(t){case o.LoadEvent.COMMITTED:{let e=this.get_uri();e&&this._messageBridge.updateUri(e);break}case o.LoadEvent.FINISHED:this._iframe._onLoad();for(let e of this._readyCallbacks)e(this._iframe);this._readyCallbacks=[];break}}),this.connect(`load-failed`,()=>(this._iframe._onError(),!1)),this.connect(`unrealize`,()=>{this._messageBridge.destroy();let n=this._iframe[t];n&&n._close(),this._iframe[e]=null,this._iframe[t]=null})}get iframeElement(){return this._iframe}onReady(e){this._readyCallbacks.push(e)}loadUri(e){this._iframe.setAttribute(`src`,e),this.load_uri(e)}loadHtml(e,t){this._iframe.setAttribute(`srcdoc`,e),this.load_html(e,t??`about:srcdoc`)}postMessage(e,t=`*`){this._messageBridge.sendToWebView(e,t)}installGlobals(){Object.defineProperty(globalThis,`HTMLIFrameElement`,{value:n,writable:!0,configurable:!0})}});export{s as IFrameBridge};
|
|
1
|
+
import"./_virtual/_rolldown/runtime.js";import{iframeWidget as e,windowProxy as t}from"./property-symbol.js";import{HTMLIFrameElement as n}from"./html-iframe-element.js";import{IFrameWindowProxy as r}from"./iframe-window-proxy.js";import{MessageBridge as i}from"./message-bridge.js";import a from"gi://GObject";import o from"gi://WebKit?version=6.0";const s=a.registerClass({GTypeName:`GjsifyIFrameBridge`},class IFrameBridge extends o.WebView{constructor(a){let{enableDeveloperExtras:s,enableJavascript:c,...l}=a??{},u=new o.UserContentManager,d=new o.Settings;d.enable_javascript=c??!0,d.enable_developer_extras=s??!0,super({...l,user_content_manager:u,settings:d}),this._readyCallbacks=[],this._options={enableDeveloperExtras:s,enableJavascript:c},this._iframe=new n,this._iframe[e]=this,this._messageBridge=new i(this);let f=new r(this._messageBridge);this._iframe[t]=f,this._messageBridge.setWindowProxy(f),this.connect(`load-changed`,(e,t)=>{switch(t){case o.LoadEvent.COMMITTED:{let e=this.get_uri();e&&this._messageBridge.updateUri(e);break}case o.LoadEvent.FINISHED:this._iframe._onLoad();for(let e of this._readyCallbacks)e(this._iframe);this._readyCallbacks=[];break}}),this.connect(`load-failed`,()=>(this._iframe._onError(),!1)),this.connect(`unrealize`,()=>{this._messageBridge.destroy();let n=this._iframe[t];n&&n._close(),this._iframe[e]=null,this._iframe[t]=null})}get iframeElement(){return this._iframe}onReady(e){this._readyCallbacks.push(e)}loadUri(e){this._iframe.setAttribute(`src`,e),this.load_uri(e)}loadHtml(e,t){this._iframe.setAttribute(`srcdoc`,e),this.load_html(e,t??`about:srcdoc`)}postMessage(e,t=`*`){this._messageBridge.sendToWebView(e,t)}goBack(){this.go_back()}goForward(){this.go_forward()}get canGoBack(){return this.can_go_back()}get canGoForward(){return this.can_go_forward()}installGlobals(){Object.defineProperty(globalThis,`HTMLIFrameElement`,{value:n,writable:!0,configurable:!0})}});export{s as IFrameBridge};
|
|
@@ -52,6 +52,30 @@ export declare const IFrameBridge: {
|
|
|
52
52
|
* Equivalent to `this.iframeElement.contentWindow.postMessage(message, targetOrigin)`.
|
|
53
53
|
*/
|
|
54
54
|
postMessage(message: unknown, targetOrigin?: string): void;
|
|
55
|
+
/**
|
|
56
|
+
* Navigate the embedded WebView back one entry in its internal
|
|
57
|
+
* history list. No-op when `canGoBack` is false.
|
|
58
|
+
*
|
|
59
|
+
* Note: reflects WebKit's own navigation history (independent of
|
|
60
|
+
* any application-level history the embedder maintains). The
|
|
61
|
+
* browser `<iframe>` element has no equivalent — cross-origin
|
|
62
|
+
* iframes cannot be navigated programmatically by the parent. For
|
|
63
|
+
* cross-variant (browser + GJS) parity, embedders typically track
|
|
64
|
+
* URLs themselves and call `loadUri(url)`; the methods here exist
|
|
65
|
+
* for apps that DO want to expose the WebKit-internal back/forward
|
|
66
|
+
* list directly (e.g. a "WebView with browser-like UX").
|
|
67
|
+
*/
|
|
68
|
+
goBack(): void;
|
|
69
|
+
/** Navigate forward in the WebView's internal history. No-op when
|
|
70
|
+
* `canGoForward` is false. See `goBack()` for caveats. */
|
|
71
|
+
goForward(): void;
|
|
72
|
+
/** True when the WebView has prior entries in its internal history.
|
|
73
|
+
* Reflects WebKit's `can-go-back` state, NOT any application-level
|
|
74
|
+
* history stack. */
|
|
75
|
+
get canGoBack(): boolean;
|
|
76
|
+
/** True when the WebView has forward entries in its internal history.
|
|
77
|
+
* Reflects WebKit's `can-go-forward` state. */
|
|
78
|
+
get canGoForward(): boolean;
|
|
55
79
|
/**
|
|
56
80
|
* Set `globalThis.HTMLIFrameElement` to the gjsify implementation.
|
|
57
81
|
*/
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gjsify/iframe",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.15",
|
|
4
4
|
"description": "HTMLIFrameElement for GJS, backed by WebKit.WebView",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"module": "lib/esm/index.js",
|
|
@@ -37,13 +37,13 @@
|
|
|
37
37
|
"@girs/gtk-4.0": "4.23.0-4.0.0-rc.15",
|
|
38
38
|
"@girs/javascriptcore-6.0": "2.52.1-4.0.0-rc.15",
|
|
39
39
|
"@girs/webkit-6.0": "2.52.1-4.0.0-rc.15",
|
|
40
|
-
"@gjsify/dom-elements": "^0.4.
|
|
41
|
-
"@gjsify/dom-events": "^0.4.
|
|
42
|
-
"@gjsify/message-channel": "^0.4.
|
|
40
|
+
"@gjsify/dom-elements": "^0.4.15",
|
|
41
|
+
"@gjsify/dom-events": "^0.4.15",
|
|
42
|
+
"@gjsify/message-channel": "^0.4.15"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
|
-
"@gjsify/cli": "^0.4.
|
|
46
|
-
"@gjsify/unit": "^0.4.
|
|
45
|
+
"@gjsify/cli": "^0.4.15",
|
|
46
|
+
"@gjsify/unit": "^0.4.15",
|
|
47
47
|
"@types/node": "^25.6.2",
|
|
48
48
|
"typescript": "^6.0.3"
|
|
49
49
|
}
|