@gjsify/iframe 0.4.14 → 0.4.16

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.
@@ -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.14",
3
+ "version": "0.4.16",
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.14",
41
- "@gjsify/dom-events": "^0.4.14",
42
- "@gjsify/message-channel": "^0.4.14"
40
+ "@gjsify/dom-elements": "^0.4.16",
41
+ "@gjsify/dom-events": "^0.4.16",
42
+ "@gjsify/message-channel": "^0.4.16"
43
43
  },
44
44
  "devDependencies": {
45
- "@gjsify/cli": "^0.4.14",
46
- "@gjsify/unit": "^0.4.14",
45
+ "@gjsify/cli": "^0.4.16",
46
+ "@gjsify/unit": "^0.4.16",
47
47
  "@types/node": "^25.6.2",
48
48
  "typescript": "^6.0.3"
49
49
  }