Feature #5530


For Saxon-JS under Node, expose global as ixsl:window() or ixsl:global()

Added by Martin Honnen almost 2 years ago. Updated almost 2 years ago.

In Progress
IXSL extensions
Start date:
Due date:
% Done:


Estimated time:
Applies to JS Branch:
Fix Committed on JS Branch:
Fixed in JS Release:
SEF Generated with:
Contact person:
Additional contact persons:


For Saxon-JS in the browser, the function!ixsl-extension/functions/window gives access to the window object which is the gobal object in the browser environment. The global object under Node.js serves the same purpose but it isn't exposed in Saxon-JS under Node, it appears.

I think the use of JavaScript from Saxon-JS would benefit from having that global object exposed as e.g. ixsl:window(), or, if that breaks things, to create a new ixsl:global(), which, in the browser, returns the window object and under returns the global object.

The reason: if you want, for instance, from XSLT/XPath call Javascript constructors like new URL(...), you can do so using e.g. Reflect.construct(URL, [...]) in JavaScript or ixsl:window() => ixsl:call('Reflect.construct', [ ixsl:window()?URL, [ ...] ]) in the browser but there is no way to do the same currently under Node.js as you would need to have ixsl:window() return the global object or you would need a new ixsl:global() to use e.g. ixsl:global() => ixsl:call('Reflect.construct', [ ixsl:global()?URL, [ ...] ]).

Related issues

Related to SaxonJS - Feature #5057: Constructing JS objectsNew2021-08-07

Actions #1

Updated by Norm Tovey-Walsh almost 2 years ago

That makes sense to me. I can't decide which I like better, abusing ixsl:window on Node.js to return the global object or adding a new ixsl:global function.

I would have sworn there was also a feature request on file to support calls to new without reflection, but I'm not able to locate it just at the moment.

Actions #3

Updated by Norm Tovey-Walsh almost 2 years ago

Actions #4

Updated by Norm Tovey-Walsh almost 2 years ago

  • Status changed from New to In Progress

I've sorted out a hack whereby the ixsl:window() function returns the global object on Node.js.

Actions #6

Updated by Michael Kay almost 2 years ago

I'm inclined to stick with ixsl:window; but you could argue it both ways.

Please register to edit this issue

Also available in: Atom PDF Tracking page