@gjsify/iframe 0.3.20 → 0.4.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.
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=Object.defineProperty,__name=(t,n)=>e(t,`name`,{value:n,configurable:!0});export{__name};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{iframeWidget as e,loaded as t,windowProxy as n}from"./property-symbol.js";import{HTMLElement as r,PropertySymbol as i}from"@gjsify/dom-elements";import{Event as a}from"@gjsify/dom-events";let o,s,c;const{tagName:l,localName:u,namespaceURI:d}=i;var
|
|
1
|
+
import"./_virtual/_rolldown/runtime.js";import{iframeWidget as e,loaded as t,windowProxy as n}from"./property-symbol.js";import{HTMLElement as r,PropertySymbol as i}from"@gjsify/dom-elements";import{Event as a}from"@gjsify/dom-events";let o,s,c;const{tagName:l,localName:u,namespaceURI:d}=i;var HTMLIFrameElement=class extends r{constructor(){super(),this[o]=null,this[s]=null,this[c]=!1,this[l]=`IFRAME`,this[u]=`iframe`,this[d]=`http://www.w3.org/1999/xhtml`}get src(){return this.getAttribute(`src`)??``}set src(t){let n=this.getAttribute(`src`);this.setAttribute(`src`,t),t!==n&&t&&this[e]&&this[e].loadUri(t)}get srcdoc(){return this.getAttribute(`srcdoc`)??``}set srcdoc(t){let n=this.getAttribute(`srcdoc`);this.setAttribute(`srcdoc`,t),t!==n&&t&&this[e]&&this[e].loadHtml(t)}get name(){return this.getAttribute(`name`)??``}set name(e){this.setAttribute(`name`,e)}get sandbox(){return this.getAttribute(`sandbox`)??``}set sandbox(e){this.setAttribute(`sandbox`,e)}get allow(){return this.getAttribute(`allow`)??``}set allow(e){this.setAttribute(`allow`,e)}get referrerPolicy(){return this.getAttribute(`referrerpolicy`)??``}set referrerPolicy(e){this.setAttribute(`referrerpolicy`,e)}get loading(){let e=this.getAttribute(`loading`);return e===`lazy`||e===`eager`?e:`eager`}set loading(e){this.setAttribute(`loading`,e)}get width(){return this.getAttribute(`width`)??``}set width(e){this.setAttribute(`width`,e)}get height(){return this.getAttribute(`height`)??``}set height(e){this.setAttribute(`height`,e)}get contentWindow(){return this[n]}get contentDocument(){return null}getSVGDocument(){return null}cloneNode(r=!1){let i=super.cloneNode(r);return i[e]=null,i[n]=null,i[t]=!1,i}get[(o=e,s=n,c=t,Symbol.toStringTag)](){return`HTMLIFrameElement`}_onLoad(){this[t]=!0,this.dispatchEvent(new a(`load`))}_onError(){this.dispatchEvent(new a(`error`))}};export{HTMLIFrameElement};
|
package/lib/esm/iframe-bridge.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
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 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)}installGlobals(){Object.defineProperty(globalThis,`HTMLIFrameElement`,{value:n,writable:!0,configurable:!0})}});export{s as IFrameBridge};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{EventTarget as e}from"@gjsify/dom-events";var
|
|
1
|
+
import"./_virtual/_rolldown/runtime.js";import{EventTarget as e}from"@gjsify/dom-events";var IFrameWindowProxy=class extends e{constructor(e){super(),this._closed=!1,this._bridge=e}postMessage(e,t=`*`){this._closed||this._bridge.sendToWebView(e,t)}get location(){return this._bridge.getLocation()}get parent(){return globalThis}get top(){return globalThis}get self(){return this}get window(){return this}get closed(){return this._closed}_close(){this._closed=!0}get[Symbol.toStringTag](){return`IFrameWindowProxy`}};export{IFrameWindowProxy};
|
package/lib/esm/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{HTMLIFrameElement as e}from"./html-iframe-element.js";import{IFrameWindowProxy as t}from"./iframe-window-proxy.js";import{MessageBridge as n}from"./message-bridge.js";import{IFrameBridge as r}from"./iframe-bridge.js";import{Document as i}from"@gjsify/dom-elements";i.registerElementFactory(`iframe`,()=>new e),Object.defineProperty(globalThis,`HTMLIFrameElement`,{value:e,writable:!0,configurable:!0});export{e as HTMLIFrameElement,r as IFrameBridge,t as IFrameWindowProxy,n as MessageBridge};
|
|
1
|
+
import"./_virtual/_rolldown/runtime.js";import{HTMLIFrameElement as e}from"./html-iframe-element.js";import{IFrameWindowProxy as t}from"./iframe-window-proxy.js";import{MessageBridge as n}from"./message-bridge.js";import{IFrameBridge as r}from"./iframe-bridge.js";import{Document as i}from"@gjsify/dom-elements";i.registerElementFactory(`iframe`,()=>new e),Object.defineProperty(globalThis,`HTMLIFrameElement`,{value:e,writable:!0,configurable:!0});export{e as HTMLIFrameElement,r as IFrameBridge,t as IFrameWindowProxy,n as MessageBridge};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{MessageEvent as e}from"@gjsify/dom-events";import t from"gi://WebKit?version=6.0";import n from"gi://Gio?version=2.0";n._promisify(t.WebView.prototype,`evaluate_javascript`,`evaluate_javascript_finish`);const r=`gjsify-iframe`,i=`(function() {
|
|
1
|
+
import"./_virtual/_rolldown/runtime.js";import{MessageEvent as e}from"@gjsify/dom-events";import t from"gi://WebKit?version=6.0";import n from"gi://Gio?version=2.0";n._promisify(t.WebView.prototype,`evaluate_javascript`,`evaluate_javascript_finish`);const r=`gjsify-iframe`,i=`(function() {
|
|
2
2
|
var handler = window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers['${r}'];
|
|
3
3
|
if (!handler) return;
|
|
4
4
|
function bridgePostMessage(data, targetOrigin) {
|
|
@@ -18,4 +18,4 @@ import{MessageEvent as e}from"@gjsify/dom-events";import t from"gi://WebKit?vers
|
|
|
18
18
|
};
|
|
19
19
|
// Also expose on a safe namespace for explicit use
|
|
20
20
|
window.__gjsifyBridge = { postMessage: bridgePostMessage, origPostMessage: origPostMessage };
|
|
21
|
-
})();`;var
|
|
21
|
+
})();`;var MessageBridge=class{constructor(e){this._windowProxy=null,this._currentUri=`about:blank`,this._signalId=null,this._webView=e,this._userContentManager=e.get_user_content_manager(),this._setupReceiver(),this._injectBootstrapScript()}setWindowProxy(e){this._windowProxy=e}updateUri(e){this._currentUri=e}getLocation(){let e;try{e=new URL(this._currentUri).origin}catch{e=`null`}return{href:this._currentUri,origin:e}}sendToWebView(e,t){let n=JSON.stringify(e),r=JSON.stringify(`gjsify`),i=`window.dispatchEvent(new MessageEvent('message', { data: JSON.parse(${JSON.stringify(n)}), origin: ${r} }));`;this._webView.evaluate_javascript(i,-1,null,null,null).catch(()=>{})}destroy(){this._signalId!==null&&(this._userContentManager.disconnect(this._signalId),this._signalId=null),this._userContentManager.unregister_script_message_handler(r,null),this._windowProxy=null}_setupReceiver(){this._userContentManager.register_script_message_handler(r,null),this._signalId=this._userContentManager.connect(`script-message-received::${r}`,(t,n)=>{if(this._windowProxy)try{let t=n.to_string(),r=JSON.parse(t),i=new e(`message`,{data:r.data,origin:r.origin});this._windowProxy.dispatchEvent(i)}catch(e){console.error(`[IFrame MessageBridge] Error processing message:`,e)}})}_injectBootstrapScript(){let e=new t.UserScript(i,t.UserContentInjectedFrames.ALL_FRAMES,t.UserScriptInjectionTime.START,null,null);this._userContentManager.add_script(e)}};export{MessageBridge};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gjsify/iframe",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "HTMLIFrameElement for GJS, backed by WebKit.WebView",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"module": "lib/esm/index.js",
|
|
@@ -30,16 +30,16 @@
|
|
|
30
30
|
"dom"
|
|
31
31
|
],
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@girs/gjs": "4.0.0-rc.
|
|
34
|
-
"@girs/gtk-4.0": "4.23.0-4.0.0-rc.
|
|
35
|
-
"@girs/javascriptcore-6.0": "2.52.1-4.0.0-rc.
|
|
36
|
-
"@girs/webkit-6.0": "2.52.1-4.0.0-rc.
|
|
37
|
-
"@gjsify/dom-elements": "^0.
|
|
38
|
-
"@gjsify/dom-events": "^0.
|
|
33
|
+
"@girs/gjs": "4.0.0-rc.15",
|
|
34
|
+
"@girs/gtk-4.0": "4.23.0-4.0.0-rc.15",
|
|
35
|
+
"@girs/javascriptcore-6.0": "2.52.1-4.0.0-rc.15",
|
|
36
|
+
"@girs/webkit-6.0": "2.52.1-4.0.0-rc.15",
|
|
37
|
+
"@gjsify/dom-elements": "^0.4.0",
|
|
38
|
+
"@gjsify/dom-events": "^0.4.0"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
|
-
"@gjsify/cli": "^0.
|
|
42
|
-
"@gjsify/unit": "^0.
|
|
41
|
+
"@gjsify/cli": "^0.4.0",
|
|
42
|
+
"@gjsify/unit": "^0.4.0",
|
|
43
43
|
"@types/node": "^25.6.2",
|
|
44
44
|
"typescript": "^6.0.3"
|
|
45
45
|
}
|